如何从海量Key里查询出某一固定前缀的Key?
1.使用keys执行(对线上业务存在很大的影响)
2.使用scan指令:无阻塞的提取出指定模式的key列表,scan每次执行只会返回少量元素,所以可以用于生产环境,而不会像keys命令带来的可能堵塞服务器的问题。
使用keys对线上的业务的影响
KES pattern:查找所有符合给定模式pattern的key
KEYS指令一次性返回所有匹配的key
键的数量过大会使服务卡顿,对于内存的消耗和Redis服务器都是一个隐患
找出所有k1开头的key
Scan指令:
要求返回k1开头的key,数量10个
第一个数据是当前遍历的游标,数量不一定是10个。
使用返回的游标进行遍历,获取新一轮的数据:
Scan无法保证返回的值之前没有返回过,所以可以在程序中设置一个set来存储返回的key。
一直到游标返回为0,代表遍历结束。
JAVA中会有相关的JAR(Jedis)包,执行redis对应的指令