redis批量删除大量key脚本

2,072次阅读
没有评论

共计 903 个字符,预计需要花费 3 分钟才能阅读完成。

redis 批量删除大量 key 脚本

因为 redis 没有设置过期时间导致 redis 内存满了,key 的数量超过几千万,

如果使用 shell 脚本 xargs -I {} 传递删除的话会导致

高并发连接 :每个键会建立一个新的 Redis 连接,多个连接会同时存在,可能造成连接数爆炸式增长。

系统开销 :不断创建新的进程和连接会给系统带来大量的开销,增加 Redis 和系统的负担。

使用这个方式直接导致系统链接数达到几十万,是非常危险的操作。

解决办法是使用 lua 脚本批量删除,因为 Lua 脚本可以一次性获取匹配的键并删除,减少多个客户端连接带来的开销。

下面是删除脚本,当然你有更好的办法也可以使用其他方法,我是在停业务的情况下操作的。

脚本屏蔽了当输入为空时删除所有 key 的操作,还有是否包含 * 的字符因为这些都会导致删除所有 key((建议操作前备份))

#!/bin/bash

# 检查是否传递了模式参数
if [ $# -ne 1 ]; then
    echo "Usage: $0 <pattern>"
    exit 1
fi

PATTERN=$1

# 检查模式是否为空
if [ -z "$PATTERN" ]; then
    echo "Error: No pattern provided."
    exit 1
fi

# 检查模式是否包含 *
if [[ $PATTERN == *\** ]]; then
    echo "Error: Pattern should not contain'*'"
    exit 1
fi

# 执行 Redis Lua 脚本以删除匹配的键
redis-cli -h 127.0.0.1 EVAL "local cursor ='0'
repeat
    local result = redis.call('SCAN', cursor, 'MATCH', '$PATTERN*', 'COUNT', 1000)
    cursor = result[1]
    local keys = result[2]
    if #keys > 0 then
        redis.call('DEL', unpack(keys))
    end
until cursor == '0'
return true
" 0

然后执行

chmod +x del-redis-key.sh
bash del-redis-key.sh abcdefd

这样就会删除 abcdefd* 匹配到的所有 key

微信扫描下方的二维码阅读本文

正文完
 0
yx
版权声明:本站原创文章,由 yx 于2024-09-11发表,共计903字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码

bttech

文章搜索
一言一句话
-「
随机文章
降本增效之-实现prometheus对阿里云oss nas监控

降本增效之-实现prometheus对阿里云oss nas监控

阿里云 oss nas 需要时刻巡检注意监控流量以及存储大小,需要监控是担心 oss 滥用,nas 的瓶颈问题...
降本增效之-应用部署到k8s

降本增效之-应用部署到k8s

之前应用都采用了传统的服务器部署,很多服务器都会有内存或者 cpu 浪费的情况。把所有的服务准备都迁移到 k8...
ubuntu20安装部署comfyui脚本

ubuntu20安装部署comfyui脚本

基础环境参考上一篇文章安装基本的驱动 这个使用的曲线较高,有一定的学习成本。脚本如下直接使用即可! 微信扫描下...
elasticsearch7.8.0索引备份到阿里云oss以及恢复

elasticsearch7.8.0索引备份到阿里云oss以及恢复

背景需求,阿里云新建了一套 elk 但是数据需要进行迁移备份, 解决方案使用 logstash 迁移很慢,10...
降本增效之-自建k8s监控体系

降本增效之-自建k8s监控体系

使用阿里云 ack, 如果使用阿里云的监控体系一个月是需要几百块钱的监控费用,为了节约这笔费用。使用开源的 p...