2010-08-02 137 views
3

我正在使用redis进行缓存,但最近我遇到了内存使用量的问题 - 必须重新启动服务器,因为所有内存都已被占用。redis配置问题?

这不是最大的机器,但我应该如何配置redis以避免同样的问题呢?

free -m 
      total  used  free  shared buffers  cached 
Mem:   240  222   17   0   6   38 
-/+ buffers/cache:  177   62 
Swap:   255   46  209 

我已经改变了以下设置:

超时60个
数据库1
节省300 1
节省60 100
maxmemory 104857600

top 
top - 14:15:28 up 1:19, 1 user, load average: 0.00, 0.00, 0.00 
Tasks: 49 total, 1 running, 48 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 245956k total, 228420k used, 17536k free,  6916k buffers 
Swap: 262136k total, 47628k used, 214508k free, 39540k cached 

回答

1

不同于分布式缓存,redis的是应该是一个数据库;所以它不会自动删除旧值以腾出空间给新的值。

您必须明确设置每个键/值的过期时间,即使如此您可能会溢出,如果您创建键/值比这更快。

+0

谢谢,我会这样做,但基于可用内存的配置呢?我刚刚检查了我的代码,并且我正在使用setTimeout()随处添加一个新密钥 – 2010-08-02 12:26:17

1

使用Redis的虚拟内存中的Redis 2.0: http://antirez.com/post/redis-virtual-memory-story.html

+0

Redis虚拟内存现已折旧。如果你想从redis获得所有最新的伟大(EVAL,variadic arguments等),那么你应该在redis 2.0中找到虚拟内存的替代方案。 http://redis.io/topics/virtual-memory – lastcanal 2012-10-28 16:46:37

5

您可以使用配置文件中的“maxmemory”指令:超出的内存量时,则Redis的将过期其已经是过期设置较早键(将尽快过期的密钥是第一个将被删除的密钥)。