• Redis淘汰和过期策略


    Redis淘汰和过期策略



    一、为什么选择Redis?

    优越于其它键值数据存储系统的特点:

    • Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。
    • 与其它键值数据存储相比,Redis有一组相对丰富的数据类型。
    • Redis可以将数据复制到任意数量的从机中。

    Redis的其他优点

    • 开源的 key-value 存储系统
    • 异常快 - 由于主要在内存操作,Redis非常快。每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
    • 支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
      操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
    • 多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。
    • 支持master-slave (主从) 同步和哨兵模式。

    二、Redis淘汰策略

     Redis 提供了几种内存淘汰机制让用户选择:
    
    • 1
    • noeviction:当内存超出 最大内存,写入请求会报错,但是删除和读请求可以继续。
    • allkeys-lru:当内存超出 最大内存,在所有的 key 中,移除最少使用的key。
    可实现LRU的算法(参考)
     算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
     1. 新数据插入到链表头部;
     2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
     3. 当链表满的时候,将链表尾部的数据丢弃。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • allkeys-random:当内存超出 最大内存,在所有的 key 中,随机移除某个 key。
    • volatile-lru:当内存超出 最大内存,在设置了过期时间 key 的字典中,移除最少使用的 key。把 Redis 既当缓存,又做持久化的时候使用这种策略。
    • volatile-random:当内存超出 最大内存,在设置了过期时间 key 的字典中,随机移除某个key。
    • volatile-ttl:当内存超出 最大内存,在设置了过期时间 key 的字典中,优先移除 ttl 小的。
    LRU(least recently used)最近最少使用
    LFU(least frequently used )最少经常使用
    
    • 1
    • 2

    设置方法

    1. maxmemory-policy属性设置
    • redis.conf配置文件中的maxmemory-policy属性设置,没有配置时默认为no-eviction模式。
    • config set maxmemory-policy <策略>,设置后立即生效,不需重启Redis,但重启就失效
    1. 设置maxmemory
    • 通过redis-cli命令设置:config get maxmemory和 config set maxmemory 100MB;
    • 修改redis配置文件redis.conf: maxmemory 100MB

    三、过期策略

    Redis采用的是定期删除 + 懒惰删除策略。

    定期删除策略 在同一时间出现大面积 key 过期可能导致卡顿,而且在高并发的情况下,可能会导致
    缓存雪崩

    性能问题:
    如果删除的 key 是一个非常大的对象,比如一个包含了千万元素的 hash,又或者在使用 FLUSHDB 和 FLUSHALL 删除包含大量键的数据库时,那么删除操作就会导致单线程卡顿。

    解决方案:异步
    版本:>=4.0
    
    • 1
    • 2
  • 相关阅读:
    异步爬取+多线程+redis构建一个运转丝滑且免费http-ip代理池 (一)
    虹科分享 | 如何将工程从CANoe转移到CanEasy?
    SPL工业智能:发现时序数据的异常
    百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览
    后端jar包部署常见运行和停止命令
    笔试面试相关记录(5)
    基于Java+SpringBoot+Vue物流管理小程序系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
    华为海思雄起!正出货国产监控镜头芯片 | 百能云芯
    java毕业设计员工绩效考核系统分析与设计Mybatis+系统+数据库+调试部署
    Malformed \uxxxx encoding.问题解决方案
  • 原文地址:https://blog.csdn.net/sm_crystal/article/details/60467376