做设计不能不知道的网站,九江 网站建设,企业网站怎么自适应,html5中国网站欣赏问题#xff1a; 线上有部分的redis key需要清理。 一、 由于Keys模糊匹配#xff0c;请大家在实际运用的时候忽略掉。因为Keys会引发Redis锁#xff0c;并且增加Redis的CPU占用#xff0c;情况是很恶劣的#xff0c; 官网说明如下#xff1a; Warning: consider KEYS as…问题 线上有部分的redis key需要清理。 一、 由于Keys模糊匹配请大家在实际运用的时候忽略掉。因为Keys会引发Redis锁并且增加Redis的CPU占用情况是很恶劣的 官网说明如下 Warning: consider KEYS as a command that should only be used in production environments with extreme care. It may ruin performance when it is executed against large databases.
This command is intended for debugging and special operations, such as changing your keyspace layout.
Don’t use KEYS in your regular application code.
If you’re looking for a way to find keys in a subset of your keyspace, consider using SCAN or sets. 二、方案一 如果有这种需求的话可以自己对键值做索引 比如把各种键值存到不同的set里面分类建立索引这样就可以很快的得到数据 但是这样也存在一个明显的缺点就是浪费宝贵的空间要知道这可是内存空间啊所以还是要合理考虑当然也可以想办法比如对于有规律的键值可以存储他们的始末值等等。 三、方案二 从redis的官方文档上看2.8版本之后SCAN命令已经可用允许使用游标从keyspace中检索键。 对比KEYS命令虽然SCAN无法一次性返回所有匹配结果但是却规避了阻塞系统这个高风险从而也让一些操作可以放在主节点上执行。 需要注意的是SCAN 命令是一个基于游标的迭代器。 SCAN 命令每次被调用之后 都会向用户返回一个新的游标用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数 以此来延续之前的迭代过程。同时使用SCAN用户还可以使用keyname模式和count选项对命令进行调整。SCAN相关命令还包括SSCAN 命令、HSCAN 命令和 ZSCAN 命令分别用于集合、哈希键及有续集等。 四、代码示例 # -*- coding: utf-8 -*-
import sys
from sys import argv
from rediscluster import RedisCluster# 生产环境
product_redis_nodes_str *def get_redis():redis_nodes_str product_redis_nodes_strprint redis_nodes_strstartup_nodes []for hp in redis_nodes_str.split(,):host, port hp.split(:)port int(port)startup_nodes.append({host: host, port: port})rc RedisCluster(startup_nodesstartup_nodes, max_connections16, decode_responsesFalse)print get_redis successreturn rcdef test_keys():rc get_redis()key_list []for key in rc.scan_iter(matchrc.rs.smallvideo*, count1000):key_list.append(key)if(len(key_list)100000):break;for key in key_list:rc.delete(key)if __name__ __main__:Usage python %s % __file__if len(argv) ! 1:print Usagesys.exit(1)test_keys()参考 1、http://www.redis.cn/commands/scan.html转载于:https://www.cnblogs.com/KyleXu/p/10447862.html