当前位置:首页 > 技术分享 > 正文内容

redis 设置过期Key 的 maxmemory-policy 六种方式

admin10个月前 (12-18)技术分享1360

平时会用到redis 当缓存过多时会遇到下面的报错

OOM command not allowed when used memory > 'maxmemory'

这说明redis的缓存满了

我们可以通过修改过期策略来修改

cd /usr/local/redis/bin/
./redis-cli
127.0.0.1:6379> info memory
# Memory
used_memory:123020456
used_memory_human:117.32M
used_memory_rss:127684608
used_memory_rss_human:121.77M
used_memory_peak:123522928
used_memory_peak_human:117.80M
used_memory_peak_perc:99.59%
used_memory_overhead:18968560
used_memory_startup:487136
used_memory_dataset:104051896
used_memory_dataset_perc:84.92%
total_system_memory:1927262208
total_system_memory_human:1.79G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:123000000
maxmemory_human:117.30M
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.04
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0
127.0.0.1:6379> config set maxmemory-policy allkeys-lru

过期策略的具体方式。

redis 中的默认的过期策略是 volatile-lru 。

设置方式   

设置内存淘汰策略

  • 方式1:config set maxmemory-policy <策略>,设置后立即生效,不需重启Redis,但重启就失效;

  • 方式2:修改Redis配置文件,设置maxmemory-policy <策略>,必须重启,配置永久生效。/usr/local/redis/etc/redis.conf

config set maxmemory-policy volatile-random

maxmemory-policy 六种方式

1、volatile-lru:只对设置了过期时间的key进行LRU(默认值) 

2、allkeys-lru : 删除lru算法的key   

3、volatile-random:随机删除即将过期key   

4、allkeys-random:随机删除   

5、volatile-ttl : 删除即将过期的   

6、noeviction : 永不过期,返回错误

Redis系统提供五种淘汰策略,即参数maxmemory_policy有五种取值:


noeviction: 如果缓存数据超过了maxmemory限定值,并且客户端正在执行的命令会导致内存分配,则向客户端返回错误响应.

allkeys-lru: 所有的缓存数据(包括没有超时属性的和具有超时属性的)都参与LRU算法淘汰.

volatile-lru: 只有超时属性的缓存数据才参与LRU算法淘汰.

allkeys-random: 所有的缓存数据(包括没有超时属性的和具有超时属性的)都参与淘汰, 但是采用随机淘汰,而不是用LRU算法进行淘汰.

volatile-random: 只有超时属性的缓存数据才参与淘汰,但是采用随机淘汰,而不是用LRU算法进行淘汰.

volatile-ttl: 只有超时属性的缓存数据才参与淘汰. 根据缓存数据的超时TTL进行淘汰,而不是用LRU算法进行淘汰.

因为volatile-lru, volatile-random和volatile-ttl这三个淘汰策略使用的不是全量的缓存数据,有可能无法淘汰出足够的内存空间.


因为将缓存数据设置超时属性占用更多的内存, 因此,当内存压力比较大的时候,需要慎重考虑设置超时属性.


如果当前缓存的数据使用的内存大于配置的maxmemory,并且淘汰策略不允许释放内存(noeviction),则该函数返回失败.


接下来,局部变量mem_tofree表示需要淘汰的内存,局部变量mem_freed表示已经淘汰的内存.循环执行while (mem_freed < mem_tofree)淘汰缓存数据,该循环中的逻辑可以概括为:


从全局的0号数据库开始(Redis默认有16个全局的数据库),根据淘汰策略,选择该数据库中的哈希表.如果该哈希表为空, 选择下一个全局数据库.

根据淘汰策略,在相应哈希表中找到一个待淘汰的key, 从该数据库对象中删除该key所对应的缓存数据.

如果没有找到待淘汰的key,即无法淘汰所需的缓存数据大小 函数直接返回错误.

如果当前访问的是最后一个全局数据库, 并且已经淘汰了所需的缓存数据,则该函数成功返回.如果没有淘汰所需的缓存数据,则返回步骤1,并且从0号数据库重新淘汰.

如果当前访问的不是最后一个全局数据库, 则返回步骤1, 从当前数据库的下一个数据库继续淘汰缓存数据.

如果淘汰策略是allkeys-random或者volatile-random,则从相应数据库中随机选择一个key进行淘汰.


如果淘汰策略是allkeys-lru或者volatile-lru, 则根据配置的采样值maxmemory_samples,随机从数据库中选择maxmemory_samples个key, 淘汰其中热度最低的key对应的缓存数据.


如果淘汰策略是volatile-ttl,则根据配置的采样值maxmemory_samples,随机从数据库中选择maxmemory_samples个key,淘汰其中最先要超时的key对应的缓存数据.


所以采样参数maxmemory_samples配置的数值越大, 就越能精确的查找到待淘汰的缓存数据,但是也消耗更多的CPU计算,执行效率降低.


Redis缓存清理

1.访问redis根目录    cd  /usr/local/redis-2.8.19

2.登录redis:redis-cli -h 127.0.0.1 -p 6379

3.查看所有key值:keys *

4.删除指定索引的值:del key

5.清空整个 Redis 服务器的数据:flushall 

6.清空当前库中的所有 key:flushdb 


参考:https://blog.csdn.net/azurelaker/article/details/85045245


扫描二维码推送至手机访问。

版权声明:本文由小刚刚技术博客发布,如需转载请注明出处。

本文链接:http://blog.bitefu.net/post/220.html

标签: redis
分享给朋友:

相关文章

WPS表格办公—取消科学计数法显示

WPS表格办公—取消科学计数法显示

我们在利用WPS表格与Excel表格进行日常办公时,经常需要制作各种各样的表格,当我们在表格当中输入长数据的时候,表格经常会自动显示为科学计数法,很多人都看不懂科学计数法的意思,那么,我们如何在输入长数字的时候避免显示为科学计数法呢,今天我...

php高效检测远程图片是否存在

php高效检测远程图片是否存在function img_exits($url){     $ch = curl_init();    &...

关于微信第三方平台(全网发布检测)检测流程以及踩到的坑

关于微信第三方平台(全网发布检测)检测流程以及踩到的坑

能点到全网发布这一步,说明你已经弄好了获取component_verify_ticket,component_access_token等这些参数,通常这个时候点击全网发布只会有这两个失败。如果其他失败的那就要好好检查一下你的代码了,或者查看...

微软版Ghost Win10:FFU映像备份和还原

微软版Ghost Win10:FFU映像备份和还原

在日常的维护中,系统的备份和还原是大家经常需要操作的事情。虽然Windows 10已经提供很多的工具,如系统还原、WIM备份/还原,VHD备份等。不过这些工具大多是基于文件的备份/还原。我们以前经常的使用的Ghost则是基于扇区的备份/还原...

安装Windows 10X 教你如何安装Win10X正式版 及下载地址

安装Windows 10X 教你如何安装Win10X正式版 及下载地址

安装Windows 10X 教你如何安装Win10X正式版:Windows 10X是Windows 10操作系统的新版本,主要针对双屏电脑。由于即将运行Windows 10X的双屏电脑(例如即将面世的Surface Neo)的开发遇到挫折,...

2021可用的百度网盘高速下载方法分享

2021可用的百度网盘高速下载方法分享

最新可用方法http://blog.bitefu.net/post/163.html方法很简单就是利用网盘直链下载助手【网盘直链下载助手】是一款免费开源获取网盘文件真实下载地址的油猴脚本,基于PCSAPI,支持Windows,Mac,Lin...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。