java redis优化_Redis性能优化:使用scan命令替换keys

由于每个Redis实例是使用单线程处理所有请求的,故keys命令和其他命令都是在同一个队列排队等待执行的,如果keys命令执行时间长(数量多),则会阻塞其他命令的执行,导致性能问题。

scan命令是在2.8及之后版本提供的,每次scan操作返回匹配的key的一个子集,这样每个scan请求的操作时间很短,多次scan请求之间可以执行其他命令,故减少对其他命令执行的阻塞,直到最后一个scan请求发现没有数据可返回了,则操作完成。由于scan命令需要执行多次,即相当于执行了多个命令,存在多次命令请求和响应周期,故整体执行时间可能要比keys命令长。

命令解释:scan 游标 MATCH count 每次迭代所返回的元素数量

SCAN命令返回的是一个游标,从0开始遍历,到0结束遍历。

通过scan中的MATCH 参数,可以让命令只返回和给定模式相匹配的元素,实现模糊查询的效果

127.0.0.1:6379> scan 0 match HBY* count 1000

1) "4065"

2) 1) "HBY_QUEUE_1211"

2) "HBY_QUEUE_1218"

3) "HBY_QUEUE_1208"

4) "HBY_QUEUE_1207"

5) "HBY_QUEUE_1205"

6) "HBY_QUEUE_1212"

7) "HBY_QUEUE_1214"

8) "HBY_QUEUE_1210"

9) "HBY_QUEUE_1216"

127.0.0.1:6379> scan 4065 match HBY* count 1000

1) "0"

2) 1) "HBY_QUEUE_1217"

2) "HBY_QUEUE_1209"

3) "HBY_QUEUE_1206"

4) "HBY_QUEUE_1215"

5) "HBY_QUEUE_1213"

如果定义的返回元素数量大于总的keys数量,那一下就可以match到了

127.0.0.1:6379> scan 0 match HBY* count 2000

1) "0"

2) 1) "HBY_QUEUE_1211"

2) "HBY_QUEUE_1218"

3) "HBY_QUEUE_1208"

4) "HBY_QUEUE_1207"

5) "HBY_QUEUE_1212"

6) "HBY_QUEUE_1214"

7) "HBY_QUEUE_1210"

8) "HBY_QUEUE_1216"

9) "HBY_QUEUE_1217"

10) "HBY_QUEUE_1209"

11) "HBY_QUEUE_1206"

12) "HBY_QUEUE_1215"

13) "HBY_QUEUE_1213"

注意:SCAN命令不能保证每次返回的值都是有序的,另外同一个key有可能返回多次,不做区分,需要应用程序去处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值