Redis - 理解内存

2020/02/05

本文主要以下三个方面理解Redis内存:

  • 内存消耗
  • 内存回收
  • 内存优化

内存消耗

内存回收

内存优化

先来介绍下redisObject对象:

然后再介绍下"共享整数池"

为什么Redis要维护一个[0-9999]的共享整数池?

节省内存,因为当你创建大量整数时,redisObject也是一笔很大的开销,甚至超过了整数本身。

好,我们来实践一下:

127.0.0.1:6379> set foo 100
OK
127.0.0.1:6379> object refcount foo
(integer) 2
127.0.0.1:6379> set bar 100
OK
127.0.0.1:6379> object refcount bar
(integer) 3

但有个特殊情况:当你设置了maxmemory,并且内存回收策略设置成与LRU算法相关时,Redis禁止使用共享整数池。

127.0.0.1:6379> set key:1 120
OK
127.0.0.1:6379> object refcount key:1
(integer) 2
127.0.0.1:6379> config get maxmemory-policy
1) "maxmemory-policy"
2) "noeviction"
127.0.0.1:6379> config set maxmemory-policy volatile-lru
OK
127.0.0.1:6379> set key:2 120
OK
127.0.0.1:6379> object refcount key:2
(integer) 3
127.0.0.1:6379> config set maxmemory 1GB
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "1073741824"
127.0.0.1:6379> set key:3 120
OK
127.0.0.1:6379> object refcount key:3
(integer) 1
127.0.0.1:6379> config set maxmemory-policy noeviction
OK
127.0.0.1:6379> set key:4 120
OK
127.0.0.1:6379> object refcount key:4
(integer) 4

最后来介绍下其他四种内存优化方法:

Reference

  • 《Redis开发与运维》 - 8 理解内存


一位喜欢提问、尝试的程序员

(转载本站文章请注明作者和出处 姚屹晨-yaoyichen

Post Directory