清理 redis 死键

场景:

近一年来,公司redis服务器可用内存持续缓慢下降,究其原因,较早之前的key没有设置过期时间,最终变成了一些死key。

参考文章:https://my.oschina.net/u/3023401/blog/2206618

1、需要清理的keys。

未设置ttl的keys,且半年内无访问。

2、redis 删除过期建策略。

Redis删除过期键有两种策略:passive way和active way.

  • passive way(惰性删除):当客户端访问到过期键时,发现它已过期,Redis会主动删除它
  • active way(定期删除):Redis会定期调用删除过期键,调用频率由参数hz控制,默认每秒调用10次

3、获取keys的idletime

127.0.0.1:6379> set aa bb
OK

127.0.0.1:6379> object idletime aa
(integer) 12

127.0.0.1:6379> get aa    # 访问后,idletime会清零
"bb"

127.0.0.1:6379> object idletime aa
(integer) 2

 4、清理过期的idletime脚本。

#!/bin/bash

file_dir="/data/tmp"
redis-cli -h jkb-hw-prod-apple1 -p 6391 --scan >$file_dir/$port.keys
ruleTime='12960000'

while read line
do
    storageTime=$(redis-cli -h jkb-hw-prod-apple1 -p 6391 OBJECT IDLETIME ${line}|awk '{print $1}')
    if [ ! "${storageTime}x" == "x"  ];then
        if [ ${storageTime} -gt ${ruleTime} ];then
            redis-cli -h jkb-hw-prod-apple1 -p 6391 del ${delKey}
	fi
    fi
    echo "${rowProcessed}" >/data/tmp/record-number.txt
done <$file_dir/$port.keys
原文地址:https://www.cnblogs.com/sunshine-long/p/12582681.html