Redis的scan命令学习

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis的scan命令学习

1.scan和keys



都是遍历获取key的。
keys:
简单粗暴会返回所有匹配的key。当key过多的时候阻塞,会会造成服务器卡顿,所有后续执行redis的命令会延时或者超时报错。
scan:
1、复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程; 
2、提供 limit 参数,可以控制每次返回结果的最大条数,limit 只是一个 hint,返回的
结果可多可少; 
3、同 keys 一样,它也提供模式匹配功能; 
4、服务器不需要为游标保存状态,游标的唯一状态就是 scan 返回给客户端的游标整数; 
5、返回的结果可能会有重复,需要客户端去重复,这点非常重要; 
6、遍历的过程中如果有数据修改,改动后的数据能不能遍历到是不确定的; 
7、单次返回的结果是空的并不意味着遍历结束,而要看返回的游标值是否为零; 
复制代码


2.scan命令



2.1命令


scan cursor MATCH pattern COUNT count
复制代码


2.2.scan例子说明


scan 0 match key* count 2
第一次迭代使用 `0` 作为游标, 表示开始一次新的迭代。
返回的第一条数据为槽位,标识下一次开始的地方,直到返回为0标识结束。
count 2 标识的是槽位数,而不是返回的条数
复制代码


网络异常,图片无法展示
|


2.3sand的遍历和扩容


从上面对图可以看出scan返回的槽位数据是从大到小,也就是从高位到低位。
这样做是为了扩容和缩容的时候避免槽位的遗漏和重复
复制代码


网络异常,图片无法展示
|


首先容量是2的N次方,扩容或者缩容的时候都是2的倍数。
a 1  001   1%8=1               1%16=1
b 6  110   6%8=6               6%16=6
c 3  011   3%8=3   扩大一倍后   3%16=3
d 14 1110  14%8=6              14%16=14
e 11 1011  11%8=3              11%16=11
f 11 1011  11%8=3              11%16=11
可以看到d、e、f的槽位发生了变化
高位到低位
   00      10      01      11
000 100 010 110 001 101 011 111
遍历到01的时候扩容那么会从 001 开始遍历,前面已经遍历过的数据则不会再遍历了。
复制代码


2.4redis扩容-》渐进式 rehash


2.5大key定位指令


redis-cli -a 123654 --bigkeys
redis-cli -a 123654 --bigkeys -i 0.1
上面这个指令每隔 100 条 scan 指令就会休眠 0.1s


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5天前
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
|
2月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
156 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
2月前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
71 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
2月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
340 3
|
1月前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
57 0
|
2月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
42 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
2月前
|
缓存 NoSQL 测试技术
Redis如何解决频繁的命令往返造成的性能瓶颈!
Redis如何解决频繁的命令往返造成的性能瓶颈!
|
2月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
34 3
|
2月前
|
缓存 NoSQL Redis
Redis命令:列表模糊删除详解
Redis命令:列表模糊删除详解
89 3
|
2月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
392 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习