redis 的maxmemory和output buffer的关系?

我看到有这么两段话:

1 maxmemory的值并不是实际redis使用的内存,这个选项值并没有包括slaver的output buffer。

2 删除过期键,需要产生del命令发送给slaver,如果slaver足够多,output buffer将会占用足够多的内存,导致更多的键过期,如此往复,陷入了无线循环。解决方案有多种,比如output buffer可以不计入maxmemory。


一个说“maxmemory的值没有包括slaver的output buffer”, 一个说“output buffer可以不计入maxmemory。”

我没看懂这两者之间究竟什么关系?

假如某个机器内存是64G, maxmemory设置为60G,这意思是output buffer最多能有4G还是说output buffer占用maxmemory那60G里的空间?

阅读 2.7k
1 个回答

https://segmentfault.com/a/11...

输入缓冲区不受 maxmemory 控制,假设一个 Redis 实例设置了 maxmemory 为4G,已经存储了2G数据,但是如果此时输入缓冲区使用了 3G,已经超过 maxmemory 限制,可能会产生数据丢失、键值淘汰、Out Of Memory 等情况。这种情况在正常使用过程中出现较少,但是需要注意防范 Redis 使用不规范导致出现这种情况

造成缓冲区过大的原因是 输入命令过多,Redis 无法及时处理,可能的情况:

​ a) 客户端过多,命令输入过多。

​ b) 由于命令使用的不恰当(key过大,或运行时间复杂度较高的命令)等原因造成 Redis 阻塞无法处理新的命令,从而导致客户端输入的命令积压在输入缓冲区,造成了输入缓冲区过大。

output buffer最多能有 maxmemory -Redis数据占用内存数

宣传栏