redis的bigkey扫描脚本深入介绍
Redis 深入 介绍 脚本 扫描
2023-06-13 09:19:50 时间
前言
众所周知,redis里面的大key存在是非常危险的一件事情。因为最近的工作转移到中间件相关的工作,因此关注了一下bigkey的扫描方法。首先介绍一下阿里云提供的扫描脚本:
具体可见:https://yq.aliyun.com/articles/117042 t=t1
我对这个脚本进行了一个压力测试,在redis的内存为15G,key的数量为2KW,ops为40K到80K之间,在这种情况下,阿里云的脚本完全不能跑成功(估计跑出来的时间以天为单位),主要原因是每确认一个key的情况,就需要与redis交互多次。因此,我对它的脚本进行了改造,加入了pipeline和debug object方法,脚本如下:
import sys import redis
def find_big_key_normal(db_host, db_port, db_password, db_num): client = redis.StrictRedis(host=db_host, port=db_port, password=db_password, db=db_num) temp = client.scan(cursor=i,count=1000) j =0 while temp[0] 0 : i=temp[0] j=j+len(temp[1]) try: r = client.pipeline(transaction=False) for k in temp[1]: r.debug_object(k) tempA = r.execute() x = 0 for key in tempA: length = key.get("serializedlength") ##type = key.get("encoding") if length 10240 : type = client.type(temp[1][x]) print temp[1][x], type,length x=x+1 except : print "a execption come" temp = client.scan(cursor=i,count=1000)
db_password = sys.argv[3] r = redis.StrictRedis(host=db_host, port=int(db_port), password=db_password) nodecount = 1 keyspace_info = r.info("keyspace") for db in keyspace_info: print "check ", db, " ", keyspace_info[db] find_big_key_normal(db_host, db_port, db_password, db.replace("db", ""))
我对上面的脚本同样进行了一个压力测试,在redis的内存为15G,key的数量为2KW,ops为40K到80K之间,在这种情况下:
脚本10分钟跑完,完全可用。
说明:阿里云的脚本是支持cluster的,我这个脚本是只支持单机的,大家有兴趣的可以自己去更改。
本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 redis的bigkey扫描脚本深入介绍
相关文章
- 使用Redis MGET函数获取多个键值(redismget)
- Redis对比:挑选最适合的存储库(redis库选择)
- 以List形式存储至Redis中(往redis里存list)
- 深入探索Redis 数据类型查询(查询redis数据类型)
- 深入了解本地Redis数据库内容(查看本地redis数据库)
- 深入探索Redis日志查看的命令(查看redis日志命令)
- 深入了解查看Redis中存储的值(查看redis中存储的值)
- 深入探究如何利用Redis最大化实现缓存功能(深度挖掘redis缓存)
- 深入探索Redis从原理到实现(深入理解redis原理)
- 深入解析Redis是什么,如何进行使用(是什么怎么使用redis)
- 深入了解Redis使用必不可少的数据存储优势(了解redis使用情况)
- 长利用Redis实现自增长的优势(利用redis自增)
- 深入揭秘Redis出现的错误(关于redis错误的是)
- 如何深入理解Redis缓存(怎么查看缓存redis)
- 深入了解Redis如何进行数据查询(如何查询redis数据)
- 多用户同时访问Redis的安全防护(多用户访问redis)
- Redis设计与实现原理,打开Redis之路(哪本书介绍redis原理)
- 谁在利用Redis缓存来提升效率(哪些用了redis缓存)
- 实现Redis队列数据持久化的方法(redis队列怎么持久化)
- Redis迁移原理深入理解数据迁移的本质(redis迁移原理)
- Redis集群一台足够(redis集群单数台)
- 数据Redis实现指定条数数据的返回(redis 返回指定条数)
- Redis过期场景如何构建可靠应用(redis过期场景)