## 背景 redis虽然快,但是内存成本还是比较高的,不可能像磁盘那样子拥有比较大的的容量。如果内存使用过大,系统的保护机制会讲大内存使用的进程给OOM掉,因此,我们会限制redis的最大使用内存,设置maxmemory参数,如果超过这个最大使用内存,redis就会根据淘汰策略,处理key。 ## 淘汰策略 1\. noeviction:默认策略,不淘汰,如果内存已满,添加数据是报错。 2\. allkeys-lru:在所有键中,选取最近最少使用的数据抛弃。 3\. volatile-lru:在设置了过期时间的所有键中,选取最近最少使用的数据抛弃。 4\. allkeys-random: 在所有键中,随机抛弃。 5\. volatile-random: 在设置了过期时间的所有键,随机抛弃。 6\. volatile-ttl:在设置了过期时间的所有键,抛弃存活时间最短的数据。 ## 设置最大内存和淘汰策略 config set maxmemroy 1073741824config set maxmemory-policy allkeys-lruconfig rewrite 配置文件里面设置 maxmemroy 1gbmaxmemory-policy allkeys-lru redis5的默认策略是不淘汰,直接返回报错,如下 (error) OOM command not allowed when used memory > 'maxmemory'. ## 总结 在使用redis的时候要预估好使用量,最好有一定的预留,防止突然的高并发数据,设置好maxmemory,才能生效淘汰策略。maxmemroy可以通过config set 进行动态设置,记得config rewrite保存好修改的配置。