问题描述
应用启动的时候出现报错:OOM command not allowed when used memory > ‘maxmemory‘
根据报错信息,应该是redis内存不够导致的异常。
查看缓存淘汰策略及内存使用:
设置缓存淘汰策略
Redis缓存淘汰策略是指在Redis中,当内存空间不足时,如何选择需要被淘汰(删除)的缓存数据。Redis提供了多种缓存淘汰策略,以下是其中几种常见的策略:
- LRU(Least Recently Used):选择最近最少使用的数据进行淘汰。
- LFU(Least Frequently Used):选择最不经常使用的数据进行淘汰。
- Random:随机选择要淘汰的数据。
- TTL(Time To Live):根据数据的存活时间,选择最早过期的数据进行淘汰。
Maxmemory-policy:根据设置的最大内存限制和数据的优先级,选择要淘汰的数据。
这些策略可以通过Redis配置文件中的"maxmemory-policy"参数进行设置。根据具体的使用场景和需求,选择适合的淘汰策略可以提高缓存的效率和性能。
设置maxmemory-polic
maxmemory-policy参数可以设置以下值来选择缓存淘汰策略:
- noeviction:当内存不足以容纳新写入数据时,不进行缓存淘汰,新写入操作会报错。
- allkeys-lru:基于LRU算法,在所有的键中选择最近最少使用的数据进行淘汰。
- allkeys-lfu:基于LFU算法,在所有的键中选择最不经常使用的数据进行淘汰。
- allkeys-random:随机选择要淘汰的数据。
- volatile-lru:基于LRU算法,在设置了过期时间的键中选择最近最少使用的数据进行淘汰。
- volatile-lfu:基于LFU算法,在设置了过期时间的键中选择最不经常使用的数据进行淘汰。
- volatile-random:在设置了过期时间的键中随机选择要淘汰的数据。
- volatile-ttl:根据键的剩余存活时间(TTL)进行淘汰,越早过期的数据优先被淘汰。
在此项目中我使用了volatile-lru策略。然后调整了maxmemory值,扩大了redis内存。