做商城网站哪里好,手机支持wordpress,鞋材 东莞网站建设,中山企业建站程序一、 keys命令(生产环境禁止使用)简单粗暴#xff0c;由于Redis单线程这一特性#xff0c;keys命令是以阻塞的方式执行的#xff0c;keys是以遍历的方式实现的复杂度是 O(n)#xff0c;Redis库中的key越多#xff0c;查找实现代价越大#xff0c;产生的阻塞时间越长。key… 一、 keys命令(生产环境禁止使用)简单粗暴由于Redis单线程这一特性keys命令是以阻塞的方式执行的keys是以遍历的方式实现的复杂度是 O(n)Redis库中的key越多查找实现代价越大产生的阻塞时间越长。keys * 、keys codehole* 分别是查询全部的key以及查询前缀为codehole的key。特点太暴力性能不好搜索的是整个redis缺点1、没有 offset、limit 参数一次性吐出所有满足条件的 key万一实例中有几百 w 个 key 满足条件当你看到满屏的字符串刷的没有尽头时你就知道难受了。2、keys 算法是遍历算法复杂度是 O(n)如果实例中有千万级以上的 key这个指令就会导致 Redis 服务卡顿所有读写 Redis 的其它的指令都会被延后甚至会超时报错因为 Redis 是单线程程序顺序执行所有指令其它指令必须等到当前的 keys 指令执行完了才可以继续。redis的keys命令通常在用来删除相关的key时使用但这个命令有一个弊端在redis拥有数百万及以上的keys的时候会执行的比较慢更为致命的是这个命令会阻塞redis多路复用的io主线程如果这个线程阻塞在此执行之间其他的发送向redis服务端的命令都会阻塞从而引发一系列级联反应导致瞬间响应卡顿从而引发超时等问题所以应该在生产环境禁止用使用keys和类似的命令smembers这种时间复杂度为O(N)且会阻塞主线程的命令是非常危险的。所以我们通常在生产环境数据量较大的时候会选择将keys命令做重命名禁止误操作。rename-command KEYS 官方解释https://redis.io/commands/KEYS二、 scan命令(生产环境推荐使用)以非阻塞的方式实现key值的查找绝大多数情况下是可以替代keys命令的可选性更强scan命令的特点1、复杂度虽然也是 O(n)但是它是通过游标分步进行的不会阻塞线程;2、提供 limit 参数可以控制每次返回结果的最大条数limit 只是一个 hint返回的结果可多可少;3、同 keys 一样它也提供模式匹配功能;4、服务器不需要为游标保存状态游标的唯一状态就是 scan 返回给客户端的游标整数;5、返回的结果可能会有重复需要客户端去重复这点非常重要;正常情况下使用scan没问题如果正在rehash则会造成重读比如现在有四个桶读了01,发生rehash时 0会到4上1是到5造成重读redis使用高位递增遍历如下 当02遍历完以后0426肯定是遍历完的但缩容有可能发成key重复。6、遍历的过程中如果有数据修改改动后的数据能不能遍历到是不确定的;7、单次返回的结果是空的并不意味着遍历结束而要看返回的游标值是否为零 Examples redis-cli -p 6379 -a password --scan --pattern name*三、DEL命令(生产环境禁止使用)DEL key [key ...]删除指定的一批keys如果删除中的某些key不存在则直接忽略。返回值integer-reply被删除的keys的数量 ExamplesDEL始终在阻止模式下释放值部分.但是,如果该值太大,例如对于大型LIST或HASH的分配太多,它会长时间阻止Redis.四、unlink 命令(生产环境推荐使用)unlink key [key ...]该命令和DEL十分相似删除指定的key(s),若key不存在则该key被跳过。但是相比DEL会产生阻塞该命令会在另一个线程中回收内存因此它是非阻塞的。这也是该命令名字的由来仅将keys从keyspace元数据中删除真正的删除会在后续异步操作。返回值integer-replyunlink的keys的数量. Examples复合查询删除使用样例模糊匹配要查询的KEYredis-cli -p 6379 -a password --scan --pattern name*将刚刚模糊匹配的KEY异步删除redis-cli -p 6379 -a password --scan --pattern name*|xargs -L 2000 redis-cli -p 6379 -a password unlink