首页 > 数据库 >8、Redis的RDB工具分析key的大小

8、Redis的RDB工具分析key的大小

时间:2023-03-08 15:33:17浏览次数:38  
标签:yyyyyyyy name rdb Redis key RDB Biggest string

1.什么是Redis的大key?(BigKey)
redis存储数据的时候,当某个key的值比较大(包括字符串、列表等数据类型),key的数据越大,占用的内存和空间就越多。
BigKey(大key)
Bigkey指的是redis中一些key value值很大,这些key在序列化与反序列化过程中花费的时间很大!
操作bigkey的通常比较耗时,也就意味着阻塞Redis可能性越大!占用的流量同时也会变得很大!
大白话就是:bigkey实际指一个key对应的value很大,占用的空间很大!
string类型的数据: 长度大于10K,认为是大key
list列表类型的数据: 长度大于10240,认为是大key

2.制造两个不同数据类型的大key
批量写入1万个key,为了验证一下普通key和大key占用内存的情况,数据量小的时候,不好对比
for i in $(seq -w 10000);do redis-cli -a redispwd set name${i} test${i}; redis-cli -a redispwd get name${i}; done 2>/dev/null

字符串类型的大key: #制造一个字符串类型的大key

> set k1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

列表类型的大key:                             #制造一个列表类型的大key
> LPUSH name yyyyyyyy
> LPUSH name yyyyyyyy
> LPUSH name yyyyyyyy
> LPUSH name yyyyyyyy
> LPUSH name yyyyyyyy
> LPUSH name yyyyyyyy
> LPUSH name yyyyyyyy
....
列表左边添加元素,多添加一些

> keys *
1) "name"
2) "k1"
3) "namexxx"
......

127.0.0.1:6379> LLEN name
(integer) 15
127.0.0.1:6379> LRANGE name 0 -1
 1) "yyyyyyyy"
 2) "yyyyyyyy"
 3) "yyyyyyyy"
 4) "yyyyyyyy"
 5) "yyyyyyyy"
 6) "yyyyyyyy"
 7) "yyyyyyyy"
 8) "yyyyyyyy"
 9) "yyyyyyyy"
10) "yyyyyyyy"
11) "yyyyyyyy"
12) "yyyyyyyy"
13) "yyyyyyyy"
14) "yyyyyyyy"
15) "yyyyyyyy"

3.扫描和分析大key

方法1:
# redis-cli -a redispwd --bigkeys                                                                #扫描和分析redis的大key工具
....
[00.00%] Biggest string found so far '"name07194"' with 9 bytes
[14.78%] Biggest list   found so far '"name"' with 15 items
[83.13%] Biggest string found so far '"k1"' with 216 bytes
...
-------- summary -------
Sampled 10002 keys in the keyspace!
Total key length in bytes is 90006 (avg len 9.00)
Biggest   list found '"name"' has 15 items
Biggest string found '"k1"' has 216 bytes
方法2:使用rdb工具分析大key(是通过dump.rdb文件进行分析的)
rdb分析所有key大小,建议拷贝到闲置的服务器进行分析
# yum -y install python36                                                                         #需要依赖python环境
# pip3 install rdbtools==0.1.15 -i https://mirrors.aliyun.com/pypi/simple/       #安装rdb工具
# rdb -c memory dump.rdb >/tmp/test.csv                                                 #使用rdb工具分析大key并把结果输出到一个文件里,指定rdb文件

# cat /tmp/test.csv |head -5                                                                    #查看文件,主要关心的是key和大小
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
0,string,name05565,72,string,9,9,
0,string,name07617,72,string,9,9,
0,string,name07090,72,string,9,9,
0,string,name03368,72,string,9,9,

大小排序
cat /tmp/test.csv |sort -nrk 4 -t ',' |head -5         
0,list,name,289,quicklist,15,8,
0,string,k1,272,string,216,216,
0,string,name10000,72,string,9,9,
0,string,name09999,72,string,9,9,
0,string,name09998,72,string,9,9,

4.删除大key,观察性能分析,占用内存大的key已经消失

> DEL k1
用分析工具查看,该大key已经不显示

# redis-cli -a redispwd --bigkeys
...
[00.00%] Biggest string found so far '"name07052"' with 9 bytes
[28.76%] Biggest list   found so far '"name"' with 15 items
发现占用内存大的k1已经消失

标签:yyyyyyyy,name,rdb,Redis,key,RDB,Biggest,string
From: https://www.cnblogs.com/fxxy/p/17192146.html

相关文章

  • 5、Redis慢日志和key有效期
    一、Redis的慢日志问题:如果有人反馈redis慢,如何进行排查?系统资源情况查看慢日志情况1.查看慢日志的默认配置>CONFIGGETslow*#查看慢日志的配......
  • 6、Redis禁用危险命令和压测工具
    1.Redis禁用危险命令Redis危险的命令有哪些?>FLUSHALL会清空Redis所有数据>FLUSHDB会清除当前DB所有数据>KEYS*在键过多的时候......
  • redis之列表、redis之hash、redis其他操作、redis 管道、django中使用redis、celery介
    目录1redis之列表2redis之hash3redis其他操作4redis管道5django中使用redis5celery介绍和安装6celery快速使用7celery包结构#1登录注册前端 -登录 -手......
  • 3、Redis库切换和运维监控命令
    一.Redis不同数据库的切换1.配置文件查看Redis有多少个库?#默认是16个[root@localhost~]#grepdatabases/etc/redis.confdatabases162.Redis数据库的切换>sel......
  • Simulate arrow keys on mobile phone 手机上模拟键盘的上下左右按钮
    <textareaplaceholder="testtouchmove"ontouchstart="onTouchStart(event)"ontouchmove="onTouchMove(event)"ontouchend="onTouchEnd(event)"></textarea>......
  • 2、Redis常用数据类型
    1.Redis-cli使用和认证登录#客户端工具redis-cli登录redis-cli#默认127.0.0.16379redis-cli-hipredis-cli-hip-pportredis-cli-h......
  • MemoryCache 7.0.0.0 版本下获取所有缓存Key
    在使用.Net7.0的过程种,用到微软的MemoryCache,在封装通用接口的时候需要获取所有CacheKey。目前搜索到的方案都是直接取“_entries”私有字段。但在7.0版本之后被包裹在......
  • 关于redis的击穿,穿透,雪崩
    Redis提供了一些技术手段来防止缓存击穿、缓存雪崩和缓存穿透,这些技术手段包括:缓存击穿缓存击穿是指一个不存在于缓存中的key,每次访问时都会穿透到数据库,导致数据库负......
  • redis学习笔记
    一、简单动态字符串SDS定义structsdsstr{//已保存的字符串长度intlen;//数组还剩余的空间intfree;//保存字符串的字节数组charbuf[];}获取字符串长度O(1)、......
  • springboot redis 发布与订阅
    发布与订阅Redis的发布与订阅功能可以让客户端通过广播方式,将消息(message)同时发送给可能存在的多个客户端,并且发送消息的客户端不需要知道接收消息的客户端的具体信息。......