千家信息网

redis实现批量删除的三种方式

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,redis实现批量删除:1、访问redis根目录 cd /usr/local/redis-2.8.192、登录redis:redis-cli -h 127.0.0.1 -p 6379 (其中,127.
千家信息网最后更新 2025年11月12日redis实现批量删除的三种方式

redis实现批量删除:

1、访问redis根目录 cd /usr/local/redis-2.8.19

2、登录redis:redis-cli -h 127.0.0.1 -p 6379 (其中,127.0.0.1可以写成服务器的IP地址,6379为端口号)

3、查看所有key值:keys *

4、删除指定索引的值:del key

5、清空整个 Redis 服务器的数据:flushall

6、清空当前库中的所有 key:flushdb

【第一种方式】:

下面是批量删除以"key_"开头的所有redis数据 数量为100个

redis-cli -h (IP地址) -p 6379 (端口号:6379) KEYS key_* | xargs redis-cli (-h (IP地址) -p 6379 (端口号:6379)) del  =>[执行后返回的结果影响数量]:(integer) 100[数量100个]

【上述命令中 DEL函数的具体用法】:

DEL key [key ...]

删除给定的一个或多个 key 。

不存在的 key 会被忽略。

时间复杂度:

O(N), N 为被删除的 key 的数量。

删除单个字符串类型的 key ,时间复杂度为O(1)。

删除单个列表、集合、有序集合或哈希表类型的 key ,时间复杂度为O(M), M 为以上数据结构内的元素数量。

返回值:

被删除 key 的数量。

【举例说明】:

#  删除单个 keyredis> SET name huangzOK redis> DEL name(integer) 1 # 删除一个不存在的 keyredis> EXISTS phone(integer) 0 redis> DEL phone # 失败,没有 key 被删除(integer) 0 # 同时删除多个 keyredis> SET name "redis"OK redis> SET type "key-value store"OK redis> SET website "redis.com"OK redis> DEL name type website(integer) 3

【第二种方式】:

第一种方式弊端:这样一个坏处每次都要建立一个连接,量小的话还可以接受,量大的话,效率不行。

通过内置的 Lua 解释器,可以使用 EVAL 命令对 Lua 脚本:

redis-cli -h(IP地址) -p 6379(端口号:6379) --EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 'Volume:*'

【注】:但这种处理方式,量大的情况下,lua函数unpack会出现问题,会报错误

'''(error) ERR Error running script (call to f_e177a091510d969af3b388ee986dbe6658df6b57): @user_script:1: user_script:1: too many results to unpack'''

【第二种方式优化后】:

【注释】:首先定义一个数组 keys,里面存储了模式匹配的所有的以 'Volume:'的key,然后for循环,每次处理5000个key,也就是说每次del 5000个key

redis-cli -h(IP地址) -p 6379(端口号:6379) --EVAL "local keys = redis.call('keys', ARGV[1])         for i=1,#keys,5000                 do                         redis.call('del', unpack(keys, i, math.min(i+4999, #keys)))                 end                 return #keys" 0 'Volume:*'

【第二种方式弊端】:

KEYS操作在线上是禁止使用的!

Redis是单线程的,如果量很大的话,keys是遍历key的,会导致阻塞,这样其他的客户端就没法连接了!

【第三种方式】:

自从redis2.8以后就开始支持scan命令,模式匹配可以采取下面的形式来批删除大量的key

redis-cli -a youpassowrd -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 redis-cli -a youpassword -n 0 -p 6379 DEL

【结果】:

''' /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 DEL(integer) 5000(integer) 5000(integer) 5000(integer) 5000(integer) 5000(integer) 5000(integer) 5000(integer) 207'''

以上就是redis实现批量删除的命令介绍的详细内容,更多请关注其它相关文章!

方式 数量 口号 地址 命令 复杂 单个 复杂度 数据 时间 函数 多个 弊端 服务器 模式 类型 结果 处理 服务 不行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器响应失败一键修复怎么解决 魅蓝网络技术 武职计算机网络技术校区 虚拟服务器 安全狗 无线网络技术复习笔记4 广州帝特网络技术有限公司地址 魔力象限网络安全2020 湖南质量软件开发过程服务标准 软件开发实例的流程 高新区第三方网络技术哪个好 西安直播软件开发价格 打印机服务器的设置与管理 闵行区电商软件开发欢迎咨询 郑州市中奥网络技术招聘 北京远程医疗健康软件开发 网络安全日是属于哪年 怎么查房价数据库 校园网网络安全自评报告 深圳聚乐惠网络技术公司 5g的网络技术 计算机网络技术应该学什么 卫生局能调阅医院的数据库吗 手机软件开发工具傻瓜 重庆多趣互联网科技有限公司 江阴华硕服务器维修中心热线 软件开发开源学习 互联网科技精美片头 软件开发好用的笔记本电脑 ps4战地2042怎么选服务器 软件开发实习生招聘信息
0