Redis内存不足,即使使用allkeys lru策略
我有一台Redis服务器,具有Redis内存不足,即使使用allkeys lru策略,redis,Redis,我有一台Redis服务器,具有maxmemory 512MB和maxmemory policy allkeys lru,但一旦服务器在使用一天后填满,我就不能再添加任何项目: redis 127.0.0.1:6379[3]> set foooo 123 (error) OOM command not allowed when used memory > 'maxmemory'. 我认为LRU政策永远不会发生这种情况 我将一些服务器信息复制到此Pasebin: 我怎样才能解决这个问题
maxmemory 512MB
和maxmemory policy allkeys lru
,但一旦服务器在使用一天后填满,我就不能再添加任何项目:
redis 127.0.0.1:6379[3]> set foooo 123
(error) OOM command not allowed when used memory > 'maxmemory'.
我认为LRU政策永远不会发生这种情况
我将一些服务器信息复制到此Pasebin:
我怎样才能解决这个问题
注意:我正在尝试使用maxmemory
,因为我的Redis服务器在不断消耗内存,即使几乎所有的密钥都有过期设置,而且FLUSHDB
不会释放系统内存-这可能是相关的
最后,我尝试使用Redis作为缓存。您的
info
输出表明您服务器的大量内存被Lua脚本占用:
used_memory_lua:625938432
请注意,Lua脚本将保留在内存中,直到服务器重新启动或调用。看起来好像您正在动态生成Lua脚本…似乎这就是问题所在,谢谢。我不知道
eval()
脚本在执行后会保存在内存中。RTFM;)“执行的脚本保证永远在Redis实例的给定执行的脚本缓存中。”-是的,你是对的,但这是12页,看起来很简单,而且其他语言都知道(许多语言实现eval
,但我不知道还有其他语言将代码存储在内存中…)魔鬼在细节中-很高兴为你解决了这个问题。顺便说一句,您是否正在动态生成脚本?我想不出Lua缓存变得这么大的另一个原因了。很好。或者,您仍然可以对其求值,但请确保将键名作为参数传递给“静态”脚本。