1. Redis到期缓存清除策略(三种)

  • 定时删除:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除。

    • 优点:定时删除策略对内存是友好的,通过定时器,可以保证过期key会尽可能快的被删除,并释放过期key所占用的内存。
    • 缺点:对cpu不是很友好,过期key较多的情况下,删除key会占用一部分cpu时间,内存不紧张的情况下,将cpu时间用在删除和当前任务无关的过期key上,无疑会对服务相应时间和吞吐量上造成影响。除此之外,创建一个定时器需要用到Redis服务器中的时间事件,而当前时间的实现方式为无序链表,查找一个事件的时间复杂度为O(n),并不能高效的处理大量的时间事件。
  • 惰性删除:每次从数据库获取 key 的时候去检查是否过期,如果过期,就删除该键;否则,就返回该键。
    • 优点:惰性删除对cpu时间是友好的,程序会在读取此key时进行过期检查,并且删除的目标仅限于当前处理的key,这个策略不会再删除其他过期key上花费cpu时间。
    • 缺点:惰性删除策略对内存是不友好的,一个key已经过期,只要这个key不被删除,它所占用的内存就不会释放,如果redis中存在很多这样的key,而这些key又没有被访问,那么他们永远无法被删除。除非手动执行flushdb。
  • 定期删除:每隔一段时间,程序就对数据库进行检查,删除里面的过期键。
    • 优点:定期删除是前两种策略的折中。定期删除每隔一段时间会执行一次删除过期key操作,并通过限制删除操作执行的时长和频率来减少删除key操作对redis cpu时间的影响。有效的减少了因为过期key而带来的内存浪费。
    • 缺点:如果删除操作过于频繁,或者执行时间过长,定期删除策略会演变为另外一个定时删除策略;如果删除操作执行太少,或者执行时间过短,定期删除策略又会演变成惰性删除策略一样,出现内存浪费的情况。

Redis服务采用惰性删除和定期删除两种策略,通过配合两种删除策略,服务可以很好的利用cpu时间和避免浪费内存空间之前取得平衡。

2. Redis内存淘汰策略

Redis可以配置最大使用内存server.maxmemory,通常配置为最大使用内存占最大内存3/4。当Redis达到最大内存时淘汰策略如下:

  • 淘汰设置过过期时间的数据

    • volatile-lru:从已经设置国企时间的数据中,淘汰最近最少使用的数据
    • volatile-ttl:从已经设置过期时间的数据中,淘汰将要过期的数据,即淘汰过期时间最少的数据
    • volatile-random:随即淘汰设置过期时间的数据
  • 整体策略
    • allkeys-lru:从整体数据中淘汰最近最少使用的数据
    • allkeys-random:从整体数据中随即淘汰数据
  • 不淘汰:报异常no-enviction

Redis使用之缓存清除的更多相关文章

  1. Spring Boot使用redis做数据缓存

    1 添加redis支持 在pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> & ...

  2. MySQL与Redis实现二级缓存

    redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化, ...

  3. 缓存的有效期和淘汰策略【Redis和其他缓存】【刘新宇】

    缓存有效期与淘汰策略 有效期 TTL (Time to live) 设置有效期的作用: 节省空间 做到数据弱一致性,有效期失效后,可以保证数据的一致性 Redis的过期策略 过期策略通常有以下三种: ...

  4. mybatis 使用redis实现二级缓存(spring boot)

    mybatis 自定义redis做二级缓存 前言 如果关注功能实现,可以直接看功能实现部分 何时使用二级缓存 一个宗旨---不常变的稳定而常用的 一级是默认开启的sqlsession级别的. 只在单表 ...

  5. Mybatis整合Redis实现二级缓存

    Mybatis集成ehcache . 为什么需要缓存 拉高程序的性能 . 什么样的数据需要缓存 很少被修改或根本不改的数据 业务场景比如:耗时较高的统计分析sql.电话账单查询sql等 . ehcac ...

  6. ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

    ASP.NET Core 使用 Redis 实现分布式缓存:Docker.IDistributedCache.StackExchangeRedis 前提:一台 Linux 服务器.已安装 Docker ...

  7. redis实现二级缓存

    缓存的作用就是降低数据库的使用率,来减轻数据库的负担.我们平常的操作一般都是查>改,所以数据库的有些查操作是重复的,如果一直使用数据库就会有负担.Mybatis也会做缓存,也会有一级缓存和二级缓 ...

  8. WEB 应用缓存解析以及使用 Redis 实现分布式缓存

    什么是缓存? 缓存就是数据交换的缓冲区,用于临时存储数据(使用频繁的数据).当用户请求数据时,首先在缓存中寻找,如果找到了则直接返回.如果找不到,则去数据库中查找.缓存的本质就是用空间换时间,牺牲数据 ...

  9. Net分布式系统之五:C#使用Redis集群缓存

    本文介绍系统缓存组件,采用NOSQL之Redis作为系统缓存层. 一.背景 系统考虑到高并发的使用场景.对于并发提交场景,通过上一章节介绍的RabbitMQ组件解决.对于系统高并发查询,为了提供性能减 ...

  10. ms sql server缓存清除与内存释放

    Sql Server系统内 存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系 ...

随机推荐

  1. 云服务器搭建redis主从复制以及哨兵模式(附踩坑记录)

    云服务器搭建redis主从复制以及哨兵模式(附踩坑记录) 踩坑记录见最后 搭建一主两从: 在根目录下任意新建一个目录/myredis来存放配置文件: 将我们常用的redis.conf文件拷贝到该目录下 ...

  2. mkcert 生成本地SSL证书 IIS 安装

    下载mkcert https://github.com/FiloSottile/mkcert/releases/latest 管理员身份 cmd 命令目录下 mkcert-v1.4.4-windows ...

  3. centos7 为文件夹添加写入权限

    [root@VM-16-15-centos ~]# sudo su[root@VM-16-15-centos ~]# cd /www/wwwroot/www.htqq.sale/php/images[ ...

  4. 面向对象ooDay8

    精华笔记: 接口: 是一种数据类型(引用类型) 由interface定义 只能包含常量和抽象方法(所有数据默认都是常量,所有方法默认都是抽象的) 接口不能被实例化 接口是需要被实现/继承的,实现/派生 ...

  5. 用shell开火车哈哈

    用shell开火车!(σ゚∀゚)σ⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶ while true; do sl -aFile; done 这个效果更佳

  6. linux 文件系统和包管理工具rpm,yum

    文件系统 1.什么是文件系统? 文件系统是一种存储和组织计算机中数据文件的机制或方法,他使得对计算机内的数据的存储.访问和查找变得更容易,简单. 文件系统落到计算机里其实就是一个应用软件 ext2 e ...

  7. K8S中Pod概念

    一.资源限制 Pod 是 kubernetes 中最小的资源管理组件,Pod 也是最小化运行容器化应用的资源对象.一个 Pod 代表着集群中运行的一个进程.kubernetes 中其他大多数组件都是围 ...

  8. axios实现无感刷新

    前言 最近在做需求的时候,涉及到登录token,产品提出一个问题:能不能让token过期时间长一点,我频繁的要去登录. 前端:后端,你能不能把token 过期时间设置的长一点. 后端:可以,但是那样做 ...

  9. 【原创】2022年linux环境下QT6不支持中文输入法解决方案

    1.配置环境 export PATH="~/目录/Qt/6.x.x/gcc_64/bin":$PATH export PATH="~/目录/Qt/Tools/Cmake/ ...

  10. (6) JavaScript - Math对象与日期对象

    1 认识对象 概念:对象就是一种类型,一种引用类型,而对象则是引用类型的实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,通常它也被称作类. 面向过程思想:只考虑过程 ...