电子商务网站怎么做素材包,萍乡网站开发公司,wordpress可视化找不着,嘉兴新闻头条最新消息一、KEYS#xff1a;全量遍历键KEYS pattern功能#xff1a;用来获取此数据库中所有的键名注意事项#xff1a;KEYS命令需要遍历Redis中的所有键#xff0c;当键的数量较多时会影响性能#xff0c;不建议在生产环境下使用支持glob风格通配符格式#xff0c;见下表#x… 一、KEYS全量遍历键KEYS pattern功能用来获取此数据库中所有的键名注意事项KEYS命令需要遍历Redis中的所有键当键的数量较多时会影响性能不建议在生产环境下使用支持glob风格通配符格式见下表符号含义匹配一个字符*匹配任意个(包括0个)字符[]匹配括号间的任一字符 可以使用“-”符号表示一个范围如a [b-d]可以匹配“ab、ac和“ad\x匹配字符x用于转义符号。如要匹配“?就需要使用\?KEYS命令使用扩展因为Redis采取单线程架构如果Redis包含了大量的键那么执行该命令可能会造成Redis阻塞所以一般建议不要在生产环境下使用该命令有时候确实有遍历键的需求那么可以在下面三种情况下使用在一个不对外提供服务的Redis从节点上执行这样不会阻塞到客户端 的请求但是会影响到主从复制如果确认键值总数确实比较少可以执行该命令使用下面要介绍的scan命令渐进式的遍历所有键可以有效防止阻 塞。演示案例下面是一些基本使用当需要遍历所有键时例如检测过期或闲置时间、寻找大对象等KEYS是一个很有帮助的命令。例如想删除所有以video字符串开头的键可以执行下面的命令redis-cli keys video* | xargs redis-cli del二、SCAN渐进式遍历键命令介绍Redis从2.8版本后提供了一个新的命令scan它能有效的解决keys命令存在的问题和keys命令执行时会遍历所有键不同scan采用渐进式遍历的方式来解决keys命令可能带来的阻塞问题每次scan命令的时间复杂度是O(1)但是要真正实现keys的功能需要执行多次scanRedis存储键值对实际使用的是hashtable的数据结构.那么每次执行scan可以想象成只扫描一个字典中的一部分键直到将字典中的所有键遍历完毕SCAN命令可能会产生的问题如果在SCAN过程中有键发生变化增加、删除、修改那么遍历可能会遇到如下问题新增的键可能没有遍历到遍历出了重复的键等情况也就是说SCAN并不能保证完整的遍历出来所有的键这在开发时需要考虑 命令格式scan cursor [match pattern] [count number]参数cursor是必需参数实际上cursor是一个游标第一次遍历从0开始每次scan遍历完都会返回当前游标的值直到游标值为0表示遍历结束match pattern是可选参数它的作用的是做模式的匹配这点和keys的模式匹配很像count number是可选参数它的作用是表明每次要遍历的键个数默认值是10此参数可以适当增大演示案例例如当前Redis数据库中有26个键26个英文字母现在我们要分3次遍历完数据库中的26个键第一次执行scan 0返回两部分第一部分10代表下次scan需要的cursor第二部分是返回的11个键第二次执行“scan 10”因为上一次返回10所以从“cursor10”开始扫描结果如下所示返回10个键第二次执行“scan 3”因为上一次返回3所以从“cursor3”开始扫描结果如下所示返回5个键上图中SCAN命令返回0代表所有的键已经遍历完所以遍历结束扩展除了scan之外Redis提供了面向哈希类型、集合类型、有序集合的扫描遍历命令。例如hgetall、smembers、zrange可能产生的阻塞问题对应的命令分别是hscan、sscan、zscan它们的用法和scan基本类似例如下面以sscan为例当前集合有两种类型的元素分别为old:user和new:user开头现需要将old:user开头的元素全部删除可以参考下面的伪代码String key myset;
//定义pattern
String pattern old:user*;
// 游标每次从0开始
String cursor 0;
while (true) {//获取扫描结果ScanResult scanResult redis.sscan (key, cursor, pattern) ;List elemelts 上scanResult.getResult() ;if (elements ! nu1l elements.size () 0) {//批量删除.redis.srem(key, elements) ;}//获取新的游标cursor scanResult. getSStringCursor();/ /如果游标为0表示遍历结果if (0.equals(cursor)){break;}
}
三、EXISTS判断键是否存在EXISTS key [key2 key3...]功能判断键是否存在返回值成功返回存在的键数失败返回整数0演示案例四、RENAME键的重命名RENAME key newkey功能用来重命名一个键返回值更改的键存在成功返回更改后的名称更改的键不存在返回错误演示案例 例如当前数据库中有一个键名为Hello现在将其重命名为World五、DEL删除键DEL key [key2 key3...]功能删除键返回值返回删除的成功的键数如果删除一个不存在的键返回0注意事项DEL不支持通配符但是我们可以结合Linux的管道和xargs命令自己实现删除所有符合规则的键。例如要删除以“user:”开头的键可以执行redis-cli KEYS user:* | xargs redis-cli DEL另外由于DEL命令支持多个键参数所以执行redis-cli DEL redis-cli KEYS user:* 达到同样的效果但是性能更好演示案例六、RANDOMKEY随机返回一个键RANDOMKEY功能每次执行随机返回数据库中的一个键 返回值如果有键随机返回一个键如果没有键返回null演示案例例如当前数据库中26个键每次执行命令会随机返回一个键七、TYPE获取键类型TYPE key功能用来获得键的数据类型而不是键值的数据类型返回值string字符串类型hash散列类型list列表类型set集合类型zet有序集合类型演示案例八、DBSIZE获取键总数dbsize功能用来返回当前数据库中键的总数返回值返回当前数据库中键的总数与KEYS命令的区别dbsize命令在计算键总数时不会遍历所有键而是直接获取Redis内置的键总数变量所以dbsize命令的时间复杂度为O(1)而keys命令会遍历所有键所以它的时间复杂度是O(n)当Redis保存了大量键时线上环境禁止使用演示案例例如当前数据库中有26个键