需求:获取出一部分 redis数据
keys
keys 命令:一次性获取全部模式匹配想要数据,类似 sql 中的 select like操作
smembers
smembers命令:一次性获取set集合中的所有元素全部想要数据 类似 sql 中 select * 操作
Scan
Scan命令:迭代多次返回,类似 sql 中 游标
利弊
keys命令优点: 花的时间短
keys命令的缺点:这个命令会阻塞redis多路复用的io主线程,如果这个线程阻塞,在此执行之间其他的发送向redis服务端的命令,都会阻塞,从而引发一系列级联反应,导致瞬间响应卡顿,从而引发超时等问题,所以应该在生产环境禁止用使用keys和类似的命令smembers,这种时间复杂度为O(N),且会阻塞主线程的命令,是非常危险的。
scan 命令优点:不阻塞 IO主线程
scan命令缺点:
1.由于scan采用的增量迭代,当redis中的key是随时变化的,比如key增加减少或者key的名字变更,这种情况,scan就暴露他的弊端了,可能无法获取所有的key了
2. 返回的数据有可能重复
所以说增量式迭代命令只能提供有限的保证!