redis數據淘汰機制

redis數據淘汰機制

Redis作为当前最常用的开源内存数据库,性能十分高,据官方数据表示Redis读的速度是110000次/s,写的速度是81000次/s 。而且Redis支持数据持久化,众多数据结构存储,master-slave模式数据备份等多种功能。

但是长期将Redis作为缓存使用,难免会遇到内存空间存储瓶颈,当Redis内存超出物理内存限制时,内存数据就会与磁盘产生频繁交换,使Redis性能急剧下降。

对此,Redis在生产环境中,采用配置参数maxmemory 的方式来限制内存大小。当实际存储内存超出maxmemory 参数值时,开发者们可以通过这几种方法——Redis内存淘汰策略,来决定如何腾出新空间继续支持读写工作。

那么Redis内存淘汰策略是如何工作的呢?

首先,客户端会发起需要更多内存的申请;

其次,Redis检查内存使用情况,如果实际使用内存已经超出maxmemory,Redis就会根据用户配置的淘汰策略选出无用的key,确认选中数据没有问题,成功执行淘汰任务。

淘汰策略六種
  1. volatile-lru:一部份不重要得到key設置成過期時間數據集expire,刪除時從中找最近最少使用的數據淘汰;

    (數據一部份訪問頻率高,一部份低時選它)

  2. volatile-ttl:從設置過期時間的數據集中挑選快要過期數數據淘汰,過期時間(ttl值)較短的key越快回收;

    (開發者需通過設置不同ttl來判斷數據過期的先後順序,選它)

  3. volatile-random:從設置了過期時間的數據集中任意選擇數據淘汰;

    (一部份數據被長期保存,一部份可以淘汰)

  4. allkeys-lru:從所有數據集中選最近最少使用的數據淘汰;

    (設置過期時間會消耗額外內存,為避免浪費,選它)

  5. allkeys-random:從所有數據集中選擇任意數據淘汰;

    (所有數據訪問頻率大致相等,選它)

  6. noeviction(默認策略):禁止驱逐数据,也就是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失。

淘汰策略三種

主要分為LRU淘汰、TTL淘汰、隨機淘汰三種機制

LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”;

TTL 数据淘汰机制中会先从过期时间的表中随机挑选几个键值对,越早過期的鍵先淘汰;

獲取及修改淘汰策略:

获取当前内存淘汰策略:

127.0.0.1:6379> config get maxmemory-policy

通过命令修改淘汰策略:

127.0.0.1:6379> config set maxmemory-policy allkeys-lru
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值