Redis-Scan命令

                                                                            Scan命令

Scan命令:从海量的 key 中找出满足特定前缀的 key 列表

查询key为某一类型的数据可能有很多方法,例如可以通过keys*或者是keys codehole*,查询key前缀为codehole的redis缓冲数据,但是当缓冲数据量比较大时,该命令表耗费时间,效率比较慢,具体的缺点如下列所说那样。

一、keys * 、keys codehole* 分别是查询全部的key以及查询前缀为codehole的key。特点太暴力,性能不好,搜索的是整个redis;

缺点:

1、没有 offset、limit 参数,一次性吐出所有满足条件的 key,万一实例中有几百 w 个 key 满足条件,当你看到满屏的字符串刷的没有尽头时,你就知道难受了。

2、keys 算法是遍历算法,复杂度是 O(n),如果实例中有千万级以上的 key,这个指令就会导致 Redis 服务卡顿,所有读写 Redis 的其它的指令都会被延后甚至会超时报错,因为 Redis 是单线程程序,顺序执行所有指令,其它指令必须等到当前的 keys 指令执行完了才可以继续。

二、由于keys命令存在以上的缺点,所以redis引入以下scan命令,scan命令的特点:

1、复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程;

2、提供 limit 参数,可以控制每次返回结果的最大条数,limit 只是一个 hint,返回的结果可多可少;

3、同 keys 一样,它也提供模式匹配功能;

4、服务器不需要为游标保存状态,游标的唯一状态就是 scan 返回给客户端的游标整数;

5、返回的结果可能会有重复,需要客户端去重复,这点非常重要;

6、遍历的过程中如果有数据修改,改动后的数据能不能遍历到是不确定的;

7、单次返回的结果是空的并不意味着遍历结束,而要看返回的游标值是否为零

三、scan命令具体用法:

1、scan提供3个参数:第一个是 cursor 整数值,第二个是 key 的正则模式,第三个是遍历的 limit hint,例如:scan 0 match key99* count 1000 解释:从0开始遍历,匹配key99*,总数是1000 ,1000不是结果数量,是redis单次遍历字典槽位数量(约等于),如下图所示:

2、scan遍历顺序采用高位进位加法来遍历,进位的方向是从高位到低位,原因是考虑到字典的扩容和缩容时避免槽位的遍历重复和遗漏。

3、redis的扩容:旧的数据移动到新的新组下,redis采用渐进式 rehash,同时保留旧数组和新数组

4、定位大key:redis提供给了一个命令:redis-cli -h 127.0.0.1 -p 7001 –-bigkeys,如果担心该指令会大幅提升redis的ops,可以增加一个休眠的参数:redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1

Redis 中,`redis-cli` 是一个命令行客户端工具,用于与 Redis 服务器进行交互。如果你想查看缓存(即键值对)的状态,可以使用以下 `redis-cli` 命令: 1. `INFO` 命令:这是一个通用的命令,可以提供大量关于 Redis 服务器的信息,包括内存使用、连接信息等。其中 `info keyspace` 或 `info memory` 子命令可以显示与缓存相关的部分。 ```sh redis-cli info keyspace redis-cli info memory ``` 2. `KEYS` 命令:虽然不是专门用于查看缓存的,但你可以使用它来查找所有存储的键。注意这个命令在生产环境中不推荐使用,因为它可能消耗大量资源。 ```sh redis-cli KEYS "*" (查找所有键) ``` 3. `SCAN` 命令:这个命令用于遍历整个数据库,并返回匹配给定模式的键。通常用于批量操作,但也可以用来查看缓存。 ```sh redis-cli scan ``` 4. `HGETALL` (或 `MGET`) 命令:如果使用的是哈希类型的数据结构,你可以获取特定哈希表的所有键值对。 ```sh redis-cli HGETALL myhash ``` 5. `LRANGE` 或 `LRANGE key start end`:如果使用的是有序集合(Sorted Set),可以查看指定范围内的元素。 ```sh redis-cli LRANGE myzset 0 -1 ``` 请根据你的具体需求选择合适的命令,但要注意在生产环境中谨慎使用 `KEYS` 和 `SCAN`,因为它们可能会影响性能。如果你需要详细了解缓存的详细统计和配置,`INFO` 命令通常是最佳选择。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值