当前位置:首页 > 问答 > 正文

一键操作快速清空Redis里那些value值的方法分享,教你轻松搞定redis数据清理

(来源:CSDN博客《Redis数据清理实战》)
直接清空Redis所有数据最快的方法就是使用FLUSHALL命令,打开Redis命令行,输入FLUSHALL后回车,整个Redis的数据(包括所有数据库)会被立刻清空,如果只想清空当前选中的数据库,可以用FLUSHDB命令,比如你连上Redis后默认在0号库,执行FLUSHDB就只清空0号库的数据,其他库不受影响。

(来源:阿里云开发者社区《Redis清空操作指南》)
注意: 这两个命令会直接删除数据且不可恢复,生产环境一定要慎用!建议先通INFO keyspace命令查看所有数据库的键数量,确认是否需要清理,比如看到db0:keys=1000000表示0号库有100万条数据,如果数量异常再考虑清理。

(来源:个人技术笔记《Redis批量删除技巧》)
如果想保留部分数据,只清理特定前缀的键,可以用SCANDEL组合,比如想删除所有以cache:开头的键,可以写一段Shell脚本:

redis-cli --scan --pattern "cache:*" | xargs redis-cli del

这个命令会先扫描所有匹配cache:*的键,然后批量删除,比用KEYS命令更安全,因为KEYS会阻塞Redis服务,而SCAN是增量式遍历。

(来源:GitHub开源项目《Redis清理工具》)
如果键数量极大(比如上亿条),直接DEL可能卡住Redis,可以改用游标分批次删除,以下Python脚本示例能避免内存溢出:

一键操作快速清空Redis里那些value值的方法分享,教你轻松搞定redis数据清理

import redis
r = redis.Redis(host='localhost', port=6379)
cursor = 0
while True:
    cursor, keys = r.scan(cursor=cursor, match='cache:*', count=1000)
    if keys:
        r.delete(*keys)
    if cursor == 0:
        break

这段代码每次只扫描1000个键,删完再继续,对服务器压力小。

(来源:Stack Overflow高赞回答)
对于设置了过期时间的键,Redis会自动清理,但如果过期键太多,内存回收可能不及时,可以手动触发主动清理:先执行CONFIG SET activedefrag yes开启碎片整理,再运行MEMORY PURGE(需要Redis 4.0以上版本),能强制释放过期键占用的内存。

(来源:Redis官方文档)
另一种思路是直接重启Redis并加载空数据,先停掉Redis服务,然后删除Redis持久化文件(如dump.rdbappendonly.aof),再重新启动服务,这样会创建一个全新的空数据库,但前提是你确定所有数据都可丢弃,且备份文件已清理。

一键操作快速清空Redis里那些value值的方法分享,教你轻松搞定redis数据清理

(来源:企业运维经验总结)
临时应急时,可以设置超短过期时间让键自动失效,比如突然需要清空用户会话,可以执行:

redis-cli KEYS "session:*" | xargs redis-cli EXPIRE 1

这条命令将所有会话键的过期时间设为1秒后,等Redis自动删除即可,比直接删除更温和,但需要等待短暂时间。

(来源:技术社区案例分享)
如果Redis启用了持久化,清空后还可能因持久化文件恢复旧数据,比如执行FLUSHALL后,如果立刻重启Redis,而旧的dump.rdb文件未被删除,Redis会重新加载旧数据,彻底清理需要同时删除持久化文件,并确保下次启动时不会从备份恢复。

(来源:DevOps实践笔记)
对于集群模式的Redis,不能直接用FLUSHALL,因为命令只影响当前节点,需要连接到每个节点分别执行清空,可以使用集群管理工具,比如通过redis-cli --cluster call all FLUSHALL一次性清理所有节点数据。

(来源:云服务商帮助文档)
最后提醒:清空前务必确认连接的是否为目标Redis实例,曾有人误将测试环境命令连接到生产库,导致重大事故,建议通过redis-cli -h 地址 -p 端口 -a 密码显式指定连接信息,并用INFO命令核对数据库标识后再操作。