前言
从资源使用角度来看,redis优化可以包含的知识点如下:
-
CPU 相关:使用复杂度过高命令、数据的持久化,都与耗费过多的 CPU 资源有关
-
内存相关:bigkey 内存的申请和释放、数据过期、数据淘汰、碎片整理、内存大页、内存写时复制都与内存息息相关
-
磁盘相关:数据持久化、AOF 刷盘策略,也会受到磁盘的影响
-
网络相关:短连接、实例流量过载、网络流量过载,也会降低 Redis 性能
-
计算机系统:CPU 结构、内存分配,都属于最基础的计算机系统知识
-
操作系统:写时复制、内存大页、Swap、CPU 绑定,都属于操作系统层面的知识
一、bigkey
概念:
如果一个 key 写入的 value 非常大,那么 Redis 在分配内存时就会比较耗时。同样的,当删除这个 key 时,释放内存也会比较耗时,这种类型的 key 我们一般称之为 bigkey。
如何发现:
bigkey命令,本质也是使用scan命令扫描所有的key,然后针对 key 的类型,分别执行 STRLEN、LLEN、HLEN、SCARD、ZCARD 命令,来获取 String 类型的长度、容器类型(List、Hash、Set、ZSet)的元素个数
$ redis-cli -h 127.0.0.1 -p 6379 --bigkeys -i 0.01
Sampled 829675 keys in the keyspace!
Total key length in bytes is 10059825 (avg len 12.13)
Biggest string found 'key:291880' has 10 bytes
Biggest list found 'mylist:004' has 40 items
Biggest set found 'myset:2386' has 38 members
Biggest hash found 'myhash:3574' has 37 fields
Biggest zset found 'myzset:2704' has 42 members
36313 strings with 363130 bytes (04.38% of keys, avg size 10.00)
787393 lists with 896540 items (94.90% of keys, avg size 1.14)
1994 sets with 40052 members (00.24% of keys, avg size 20.09)
1990 hashs with 39632 fields (00.24% of keys, avg size 19.92)
1985 zsets with 39750 members (00.24% of keys, avg size 20.03)
表现:
1