首页 > 数据库 >shell脚本找出不过期的redis key

shell脚本找出不过期的redis key

时间:2023-04-26 13:59:31浏览次数:43  
标签:shell scan db redis 游标 result key ttl

 1 #!/bin/bash
 2 # Redis 通过 scan 找出不过期的 key
 3 # SCAN 命令是一个基于游标的迭代器(cursor based iterator):SCAN 命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数,以此来延续之前的迭代过程。
 4 # 注意:当 SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代,而当服务器向用户返回值为 0 的游标时,表示迭代已结束!
 5 
 6 db_ip=10.100.41.148       # redis 连接IP
 7 db_port=6379              # redis 端口
 8 password='IootCdgN05srE'  # redis 密码
 9 cursor=0                  # 第一次游标
10 cnt=100                   # 每次迭代的数量
11 new_cursor=0              # 下一次游标
12 
13 redis-cli -c -h $db_ip -p $db_port -a $password scan $cursor count $cnt > scan_tmp_result
14 new_cursor=`sed -n '1p' scan_tmp_result`     # 获取下一次游标
15 sed -n '2,$p' scan_tmp_result > scan_result  # 获取 key
16 cat scan_result |while read line             # 循环遍历所有 key
17 do
18     ttl_result=`redis-cli -c -h $db_ip -p $db_port -a $password ttl $line`  # 获取key过期时间
19     if [[ $ttl_result == -1 ]];then
20     #if [ $ttl_result -eq -1 ];then          # 判断过期时间,-1 是不过期
21         echo $line >> no_ttl.log             # 追加到指定日志
22     fi
23 done
24 
25 while [ $cursor -ne $new_cursor ]            # 若游标不为0,则证明没有迭代完所有的key,继续执行,直至游标为0
26 do
27     redis-cli -c -h $db_ip -p $db_port -a $password scan $new_cursor count $cnt > scan_tmp_result
28     new_cursor=`sed -n '1p' scan_tmp_result`
29     sed -n '2,$p' scan_tmp_result > scan_result
30     cat scan_result |while read line
31     do
32         ttl_result=`redis-cli -c -h $db_ip -p $db_port -a $password ttl $line`
33         if [[ $ttl_result == -1 ]];then
34         #if [ $ttl_result -eq -1 ];then
35             echo $line >> no_ttl.log
36         fi
37     done
38 done
39 rm -rf scan_tmp_result
40 rm -rf scan_result

 

标签:shell,scan,db,redis,游标,result,key,ttl
From: https://www.cnblogs.com/angryprogrammer/p/17355658.html

相关文章

  • wpf中IValueConverter的两种实现方式(key和静态实例)以及 ValueConversion 特性
    使用值转换器的场景:你得到一个值,你需要根据你的需求转成另一个东西,可以是图片、对象等等都行传入的是object,传出的也是object,使用值转换器需要继承接口:IValueConverter里面有两个方法Convert和 ConvertBackConvert很好理解:你把xaml中某个对象中的某个属性或其他值传递到Value......
  • gitlab ssh key无法连接
    tosolveaboveissuejustchange"HostKeyVerificationStrategy"to"Acceptfirstconnection"Dashboard>ManageJenkins>ConfigureGlobalSecurity>GitHostKeyVerificationConfiguration.TheninHostKeyVerificationStr......
  • Linux常用命令redis相关
    一、查询文件中的内容vim文件名使用/xxx即可查询文件中的xxx单词,n下一个选中单词,N上一个选中单词。一、防火墙1.查看防火墙状态:firewall-cmd--state2.启动防火墙systemctlstartfirewalld3.关闭防火墙systemctlstopfirewalld二、redis1、开启redis服......
  • redis完成分布式锁
    1.正文1.Redis完成分布式锁2.redis的面试题。2.缓存当执行增删改操纵时必须保证缓存和数据库数据一致性。---删除缓存@OverridepublicDeptinsert(Deptdept){inti=deptMapper.insert(dept);returndept;}@Overridep......
  • Redis Server监控数据采集
    RedisServer监控数据采集ping,infoall,slowlogget/len/reset/clusterinfo/configgetRedis存活监控    redis-cli-h[ip]-p[port]-a[pwd]redis存活监控(redis_alive):redis本地监控agent使用ping,如果指定时间返回PONG表示存活,否则redis不能响应请求,......
  • Redis - -分布式锁
    Redis完成分布式锁#1.1缓存>当执行增删改操纵时必须保证缓存和数据库数据一致性。---删除缓存```java@OverridepublicDeptinsert(Deptdept){inti=deptMapper.insert(dept);returndept;}@OverridepublicIntegerd......
  • 龙脉key sdf 测试
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务使用key定义一个私有函数staticintgetRandom(char*r,intlength),获取length个字节的随机数(5‘)把上述函数集成到src中的sdf.c中的SDF_GenerateRandom中(5')在test中的main.c调用SDF_GenerateRandom进行测试,至少......
  • 这可能是最全面的Redis面试八股文了
    Redis连环40问,绝对够全!Redis是什么?Redis(RemoteDictionaryServer)是一个使用C语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,而且Redis......
  • 40 个简单又有效的 Linux Shell 脚本示例 转载
    1.HelloWorld程序员经常通过学习helloworld程序来学习新语言。这是一个简单的程序,将字符串“HelloWorld”打印到标准输出中。然后,使用vim或nano等编辑器创建hello-world.sh文件,并将以下行复制到其中。#!/bin/bashecho "Hello World"保存并退出文件。接下来,您需要......
  • Kali系统 连接 Xshell
    1>进入kali系统,修改ssh配置文件:vi/etc/ssh/sshd_config2>将PermitRootLoginwithout-password修改为:PermitRootLoginyes快速查找::setnumber/PermitRootLogin3>找到#PasswordAuthenticationyes把#的注释去掉快速查找::setnumber/PasswordAuthentication......