redis深度历险06-key和scan
redis深度历险06-keys和scan
keys
keys * --获得所有的key
keys f* --获得f开头的key
keys f*f --获得f开头,f结尾的key
此方法的缺点
- 没有分页
- 复杂度o(n),造成卡顿
scan --游标遍历
- 复杂度o(n),但是通过游标分布,不会阻塞。
- 提供limit参数
- 提供模式匹配的方式
- 服务器不需要保存游标状态,游标的唯一状态就是scan返回给客户端的游标整数
- 返回的结果可能重复,需要客户端去重
- 遍历过程中如果数据修改,改动后的数据不一定能遍历到。
- 单次返回结果是空并不意味着遍历结束,而要看返回的游标值是否为零
scan cursor match f* count 100 --会返回cursor游标和结果值。游标用来下一次比遍历,第一次游标用传0
大key扫描
在平时的业务开发中,尽量避免大key的产生
原理:scan扫描,得到key,判断key类型,通过size或者len得到大小,排序。Redis官方在redis-cli提供了这样的扫描功能。
reis-cli -h 127.0.0.1 -p 7001 --bigkeys
如果担心次命令造成ops提升。可以添加休眠参数
redis-cli -h 127.0.0.1 -p 7001 -i 0.1