(1)缓存时间
合理的缓存时间可以减少对数据库的频繁查询,从而降低数据库的负载。尤其是在高并发场景下,缓存能够显著减轻数据库的压力;节省内存资源,防止内存占用过多;提高数据一致性等
(2)大值key:启用压缩
针对大值 key 启用压缩,可以有效地节省内存空间、降低网络带宽消耗、提升数据传输效率,并减少磁盘 I/O 压力。但是,在启用压缩时需要综合考虑 CPU 开销、响应时间和压缩效果,选择适合的压缩方式和算法,才能充分发挥压缩的优势
(3)精简key的长度
将 Redis 中 key 的长度控制在 44 字节以内,能够有效减少内存占用、提高查询效率、优化网络传输、提升系统的整体性能,并且有利于后续的维护和管理。在设计 Redis 的键值对结构时,短小精悍的 key 设计是高效使用 Redis 的一个重要原则。
以下实验
注意,以下数据来源于:开源版 Redis 5.0.14 + Macos 13.0.1 系统环境下
Vaule不变,Key长度变化。(注意,String类型的Vaule 和Key结构一致)
数据量 | 占用内存 | key模式 | key长度 |
---|---|---|---|
100W | 85.29M | kakaxi:xxxxxxx | 14 |
100W | 100.55M | kakaxii:xxxxxxx | 15 |
100W | 100.55M | kakaxiii:redi:test:key:xxxxxxx | 30 |
100W | 115.81M | kakaxiii:redis:test:key:xxxxxxx | 31 |
100W | 115.81M | kakaxiii:redis:long:time:se:test:key:xxxxxxx | 44 |
100W | 131.06M | kakaxiii:redis:long:time:seau:test:key:xxxxxxx | 45 |
同样的 vaule,不同的Key长度占的内存,每提高一档,大概多占用15M内存(每个Key大概多分配16字节),jemallac内存分配,
当整体需要内存 < 64字节,redis使用embstr结构,一次性分配元数据和数据的内存(>redis 3.2:64-redisObject-SDS元数据-1 = 64-16-3-1 = 44字节)
因此字符串<44字节时,会使用embstr结构。
embstr 结构在 Redis 中的使用,主要体现在对短字符串的高效管理上。
它通过一次性内存分配和释放、减少内存碎片、提升缓存友好性等方式,为 Redis 提供了更快的性能和更高的内存利用率。
对于存储大量短字符串的应用场景,embstr 能显著提高 Redis 的操作效率,是 Redis 内部优化内存管理的一个重要手段