Redis模糊清除缓存技巧分享,一键高效清理,提升数据管理效率

文章导读
使用 SCAN 命令结合 Lua 脚本实现模糊匹配删除:redis-cli -h host -p port --eval scan_del.lua , key_pattern 0 1000,其中 scan_del.lua 脚本内容:local cursor = tonumber(ARGV[1])local pattern = ARGV[2]local count = tonumber(ARGV[3
📋 目录
  1. 技巧一:SCAN + Lua脚本模糊删除
  2. 技巧二:使用redis-cli管道批量删除
  3. 技巧三:Shell脚本一键清理多个模式
  4. 技巧四:Python脚本实现模糊删除
  5. 技巧五:Docker一键清理命令
A A

使用 SCAN 命令结合 Lua 脚本实现模糊匹配删除:redis-cli -h host -p port --eval scan_del.lua , key_pattern 0 1000,其中 scan_del.lua 脚本内容:
local cursor = tonumber(ARGV[1])
local pattern = ARGV[2]
local count = tonumber(ARGV[3])
local cursor2 = cursor
local deleted = 0
repeat
local result = redis.call('SCAN', cursor2, 'MATCH', pattern, 'COUNT', count)
cursor2 = tonumber(result[1])
local keys = result[2]
for i=1,#keys,1 do
redis.call('DEL', keys[i])
deleted = deleted + 1
end
until cursor2 == 0
return deleted

技巧一:SCAN + Lua脚本模糊删除

传统的KEYS命令在大数据量时会阻塞Redis主进程,所以我们使用SCAN命令进行渐进式扫描,避免阻塞。结合Lua脚本封装成一个原子操作,实现高效模糊清理。

技巧二:使用redis-cli管道批量删除

echo 'user:*' | xargs -I {} redis-cli -h 127.0.0.1 -p 6379 del {} 这条命令可以快速删除所有以user:开头的key,速度很快,一键完成。

Redis模糊清除缓存技巧分享,一键高效清理,提升数据管理效率

技巧三:Shell脚本一键清理多个模式

#!/bin/bash
patterns=('user:*' 'session:*' 'cache:temp:*')
for pattern in ${patterns[@]}; do
echo $pattern | xargs -I {} redis-cli del {}
done
echo '清理完成'

Redis模糊清除缓存技巧分享,一键高效清理,提升数据管理效率

技巧四:Python脚本实现模糊删除

import redis
r = redis.Redis(host='localhost', port=6379, db=0)
cursor = 0
pattern = 'user:*'
while True:
cursor, keys = r.scan(cursor=cursor, match=pattern, count=1000)
if keys:
r.delete(*keys)
if cursor == 0:
break
print('删除完成')

技巧五:Docker一键清理命令

docker exec -i redis-container redis-cli --scan --pattern 'temp:*' | xargs docker exec -i redis-container redis-cli del

Redis模糊清除缓存技巧分享,一键高效清理,提升数据管理效率

FAQ
Q: KEYS命令为什么不能用于生产环境?
A: KEYS会阻塞Redis进程,数据量大时可能导致服务不可用。
Q: SCAN命令的COUNT参数是什么意思?
A: 建议每次扫描的数量,不是精确限制,是提示值。
Q: 模糊删除会影响Redis性能吗?
A: 使用SCAN渐进式扫描,几乎不影响性能。
Q: 如何查看删除前匹配的key数量?
A: 先用SCAN遍历计数,再删除。