IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 实现redis中keys、scan命令删除ttl为-1的key python 持续更新 -> 正文阅读

[大数据]实现redis中keys、scan命令删除ttl为-1的key python 持续更新

作者:recommend-item-box type_blog clearfix

前言: 由于redis服务器最大使用内存为450MB,redis存储的部分key没有设置过期时间,内存淘汰策略为:noeviction 以上原因导致redis服务无法加载到新的key,迫使部分业务受阻。

  1. keys命令介绍

由于 Redis 是单线程在处理用户的命令,而 Keys 命令会一次性遍历所有 Key,于是在 命令执行过程中,无法执行其他命令。这就导致如果 Redis 中的 key 比较多,那么 Keys 命令执行时间就会比较长,从而阻塞 Redis。

Keys 的缺点:

  • 没有limit,我们只能一次性获取所有符合条件的key,如果结果有上百万条,那么等待你的就是“无穷无尽”的字符串输出。
  • keys命令是遍历算法,时间复杂度是O(N)。如我们刚才所说,这个命令非常容易导致Redis服务卡顿。因此,我们要尽量避免在生产环境使用该命令。
  1. scan命令介绍

Scan命令就是对这个一维数组进行遍历。每次返回的游标值也都是这个数组的索引。Count 参数表示遍历多少个数组的元素,将这些元素下挂接的符合条件的结果都返回。因为每个元素下挂接的链表大小不同,所以每次返回的结果数量也就不同。

Scan 的特点:

  • 复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程;
  • 提供 limit 参数,可以控制每次返回结果的最大条数,limit 只是一个 hint,返回的结果可多可少;
  • 同 keys 一样,它也提供模式匹配功能;
  • 服务器不需要为游标保存状态,游标的唯一状态就是 scan 返回给客户端的游标整数;
  • 返回的结果可能会有重复,需要客户端去重复,这点非常重要;
  • 遍历的过程中如果有数据修改,改动后的数据能不能遍历到是不确定的;
  • 单次返回的结果是空的并不意味着遍历结束,而要看返回的游标值是否为零
count参数详解:
当count参数指定为100时,然而redis中key有几百万时,这个时候返回时间会很长,
count参数调大后,减少了交互次数,返回的时间就会减少。
Count 参数越大,Redis 阻塞时间也会越长,需要取舍。
极限一点,Count 参数和总 Key 数一致时,Scan 命令就和 Keys 效果一样了。

Count 大小和 Scan 总耗时的关系如下图:
在这里插入图片描述
图源

可以发现 Count 越大,总耗时就越短,不过越后面提升就越不明显了。
所以推荐的 Count 大小为 1W 左右。
如果不考虑 Redis 的阻塞,其实 Keys 比 Scan 会快很多,毕竟一次性处理,省去了多余的交互。
  1. keys命令删除

脚本地址

#!/usr/bin/python3

#Tate:2022.4.29
#Author:Yingjian
import redis

r = redis.Redis(host='172.18.158.92', port=6379, db=0,decode_responses=True)
var = 0
var1 = 0
list_keys = r.keys("system_WXMINI/WX_MINI_NO_Userinfo/unionid*")

for key in list_keys:
    num = r.ttl(key)
    if num == -1:
        r.delete(key)
        var = var + 1
    else:
        var1 = var1 + 1

print("end")
print("删除key的数量",var)
print("未删除的数量",var1)
  1. scan命令删除

脚本地址

[root@iZwz9conqz5shxfx2gmnfkZ scripts]# cat clean_key_v5.py 
#!/usr/bin/python3

#Tate:2022.4.29
#Author:Yingjian
import redis

def RedisScan(vague_key,host="127.0.0.1",port=6379,password=None,db=0):
    redis_cache = redis.Redis(host=host, port=port, db=db, password=password, decode_responses=True)
    begin_pos,counts,var,delete_key = 0,0,0,0
    
    while True:
        begin_pos,list_keys = redis_cache.scan(begin_pos,vague_key,10000)
        counts += len(list_keys)
        for key in list_keys:
            num = redis_cache.ttl(key)
            if num == -1:
                redis_cache.delete(key)
                delete_key = delete_key + 1
            else:
                var = var + 1
        if begin_pos == 0:
            break

    print("no delete key is ", var)
    print("delete key is ", delete_key)
    print("total key is ", counts)


RedisScan("system_url_id*","172.18.158.92",6379,"*****")

  1. redis 相关调整
CONFIG SET maxmemory-policy volatile-lru
config set maxmemory 8589934592

本位参考:https://www.csdn.net/tags/MtTaMg3sMTczNDAyLWJsb2cO0O0O.html
本位参考:https://www.cnblogs.com/gnz49/p/12620380.html
本位参考:https://www.cnblogs.com/guanbin-529/p/12741638.html
本位参考:https://blog.csdn.net/cpongo3/article/details/89882268
本位参考:https://blog.csdn.net/chenqiushi123/article/details/109487502

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:49:32  更:2022-05-01 15:51:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:18:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码