首先讲解下Redis的基本概念:
Redis是单线程,同一时间段内操作大量的key值,会造成进程阻塞,会影响正在运行的其它业务,严重时会导致数据库雪崩。
方法一
方案缺陷
方案二
方案三
使用方法
方案四
需求场景
通过分析需求场景,我们发生,1个用户对应的字段可能达5个甚至更多,我们累计需要删除的key数量达到20W以上,此时只能通过编写逻辑脚本进行数据整理再进行删除。
脚本流程思路
Lua模版脚本代码:
-- 选择DB库
redis.call('select','0')
-- 输出日志
redis.log(redis.LOG_WARNING,"Step-0")
-- delRedisKeyString 替换为需要删除的key字段(例如:local delRedisKeyList = {player_moudle_10000,player_moudle_10001,player_moudle_10002};)
local delRedisKeyList = {delRedisKeyString};
-- 输出日志
redis.log(redis.LOG_WARNING,"Step-1");
redis.log(redis.LOG_WARNING,"delRedisKeyList"..#delRedisKeyList);
redis.log(redis.LOG_WARNING,"Step-2");
-- 循环输出(每次删除5000个)
for i=1,#delRedisKeyList,5000 do
redis.call('del', unpack(delRedisKeyList, i, math.min(i+4999, #delRedisKeyList)));
end