问题:

  线上有部分的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_nodes=startup_nodes, max_connections=16, decode_responses=False)print "get_redis success"return rcdef test_keys():rc = get_redis()key_list = []for key in rc.scan_iter(match='rc.rs.smallvideo*', count=1000):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

Redis 通配符批量删除key相关推荐

  1. php redis删除所有key,redis中批量删除key的方法

    Redis是一个高性能的key-value数据库.redis中可以借助Linux的xargs指令来批量删除key,也可以使用flushdb和flushall命令删除所有key. 批量删除Key Red ...

  2. 【Redis】批量删除Key的三种方式

    Redis 中有删除单个 Key 的指令 del,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux的 xargs 指令来完成这个动作 1.使用命令行批量删除redis的key 语法 . ...

  3. 【redis】批量删除key

    前言 Redis 3.0.504 脚本 使用lua脚本进行批量删除,windows.Linux下均适用. lua脚本: shell> redis-cli eval "redis.cal ...

  4. redis del 通配符 批量删除 key

    命令: redis-cli keys "user:login:*" | xargs redis-cli del 解释: 1.先查出所有的 keys 然后删除 Linux xargs ...

  5. redis中批量删除key

    1.删除所有的key,可以使用redis自身的命令: flushdb 删除当前数据库中的所有Key flushall 删除所有数据库中的key 2.使用linux中的xargs来删除所有的key re ...

  6. Redis 通配符查找及批量删除key

    1. DEL 直接加键名称 DEL key1 key2 key3 127.0.0.1:6379>  DEL site_msg_99973  false site_msg_99974   fals ...

  7. php redis 删除key 通配符,php中redis批量删除key的方法是什么

    php中redis批量删除key的方法是什么 发布时间:2020-08-28 14:42:05 来源:亿速云 阅读:159 作者:小新 小编给大家分享一下php中redis批量删除key的方法是什么, ...

  8. redis优雅的批量删除key

    redis优雅的批量删除key 近期在处理redis的故障中,发现需要删除大量的历史数据(也是bigkeys),好在符合正则表达式.要不然就很痛苦,这也体现了在设计key的时候遵循规范带来的维护好处之 ...

  9. redis批量删除key

    批量删除Key Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作 1 2 3 redis-cli ...

最新文章

  1. mysql设置user_name唯一_mysql如何设置唯一性
  2. 25/100. Palindrome Linked List
  3. SAP Cloud Application Studio避免出现性能问题的一些最佳实践
  4. 【集合框架】JDK1.8源码分析之HashMap(一)
  5. 这篇文献总结了常见的中式英语写法,来看看有没有中枪?
  6. jQuery特效:实现抽奖
  7. Leetcode之合并区间
  8. 网站性能优化的34条黄金守则(三)—JavaScript和CSS
  9. PLY——Python Lex Yacc
  10. 网易云音乐突破版权限制
  11. ICPC冠军教练亲自授课 字节跳动ICPC冬令营全球招募50支受训队
  12. UEFI Protocol使用
  13. linux-----基本操作指令(2)
  14. 公司基础网络架构及实现
  15. 汇编语言学习笔记(续)
  16. C++ 次方/次幂函数
  17. 中国国内驾照在韩国换驾照的经过
  18. 电子科大2020计算机考研真题,2021电子科技大学考研历年真题复习资料
  19. 暴力递归到动态规划 05 (贴纸拼词)
  20. 30用一个例子解释mapping到底是什么

热门文章

  1. 数字图像处理应用matlab,数字图像处理与应用(MATLAB版)
  2. angelica类似_亲爱的当归(Angelica)是第一个让我哭泣的VR体验
  3. JavaScript 数组 API 全解析
  4. 第五课 路由之初识路由
  5. 手把手教你搭建Mac环境微信小程序的本地测试服务器
  6. ubuntu16.04下安装opencv出现libgtk2.0-dev配置失败问题解决方法
  7. 使用基本ACL规则限制用户登录
  8. iptables 手册
  9. Building a Space Station--POJ 2031
  10. (Microsoft) Visual Studio LightSwitch