Redis使用之缓存清除
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使用之缓存清除的更多相关文章
- Spring Boot使用redis做数据缓存
1 添加redis支持 在pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> & ...
- MySQL与Redis实现二级缓存
redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化, ...
- 缓存的有效期和淘汰策略【Redis和其他缓存】【刘新宇】
缓存有效期与淘汰策略 有效期 TTL (Time to live) 设置有效期的作用: 节省空间 做到数据弱一致性,有效期失效后,可以保证数据的一致性 Redis的过期策略 过期策略通常有以下三种: ...
- mybatis 使用redis实现二级缓存(spring boot)
mybatis 自定义redis做二级缓存 前言 如果关注功能实现,可以直接看功能实现部分 何时使用二级缓存 一个宗旨---不常变的稳定而常用的 一级是默认开启的sqlsession级别的. 只在单表 ...
- Mybatis整合Redis实现二级缓存
Mybatis集成ehcache . 为什么需要缓存 拉高程序的性能 . 什么样的数据需要缓存 很少被修改或根本不改的数据 业务场景比如:耗时较高的统计分析sql.电话账单查询sql等 . ehcac ...
- ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis
ASP.NET Core 使用 Redis 实现分布式缓存:Docker.IDistributedCache.StackExchangeRedis 前提:一台 Linux 服务器.已安装 Docker ...
- redis实现二级缓存
缓存的作用就是降低数据库的使用率,来减轻数据库的负担.我们平常的操作一般都是查>改,所以数据库的有些查操作是重复的,如果一直使用数据库就会有负担.Mybatis也会做缓存,也会有一级缓存和二级缓 ...
- WEB 应用缓存解析以及使用 Redis 实现分布式缓存
什么是缓存? 缓存就是数据交换的缓冲区,用于临时存储数据(使用频繁的数据).当用户请求数据时,首先在缓存中寻找,如果找到了则直接返回.如果找不到,则去数据库中查找.缓存的本质就是用空间换时间,牺牲数据 ...
- Net分布式系统之五:C#使用Redis集群缓存
本文介绍系统缓存组件,采用NOSQL之Redis作为系统缓存层. 一.背景 系统考虑到高并发的使用场景.对于并发提交场景,通过上一章节介绍的RabbitMQ组件解决.对于系统高并发查询,为了提供性能减 ...
- ms sql server缓存清除与内存释放
Sql Server系统内 存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系 ...
随机推荐
- 云服务器搭建redis主从复制以及哨兵模式(附踩坑记录)
云服务器搭建redis主从复制以及哨兵模式(附踩坑记录) 踩坑记录见最后 搭建一主两从: 在根目录下任意新建一个目录/myredis来存放配置文件: 将我们常用的redis.conf文件拷贝到该目录下 ...
- mkcert 生成本地SSL证书 IIS 安装
下载mkcert https://github.com/FiloSottile/mkcert/releases/latest 管理员身份 cmd 命令目录下 mkcert-v1.4.4-windows ...
- centos7 为文件夹添加写入权限
[root@VM-16-15-centos ~]# sudo su[root@VM-16-15-centos ~]# cd /www/wwwroot/www.htqq.sale/php/images[ ...
- 面向对象ooDay8
精华笔记: 接口: 是一种数据类型(引用类型) 由interface定义 只能包含常量和抽象方法(所有数据默认都是常量,所有方法默认都是抽象的) 接口不能被实例化 接口是需要被实现/继承的,实现/派生 ...
- 用shell开火车哈哈
用shell开火车!(σ゚∀゚)σ⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶ while true; do sl -aFile; done 这个效果更佳
- linux 文件系统和包管理工具rpm,yum
文件系统 1.什么是文件系统? 文件系统是一种存储和组织计算机中数据文件的机制或方法,他使得对计算机内的数据的存储.访问和查找变得更容易,简单. 文件系统落到计算机里其实就是一个应用软件 ext2 e ...
- K8S中Pod概念
一.资源限制 Pod 是 kubernetes 中最小的资源管理组件,Pod 也是最小化运行容器化应用的资源对象.一个 Pod 代表着集群中运行的一个进程.kubernetes 中其他大多数组件都是围 ...
- axios实现无感刷新
前言 最近在做需求的时候,涉及到登录token,产品提出一个问题:能不能让token过期时间长一点,我频繁的要去登录. 前端:后端,你能不能把token 过期时间设置的长一点. 后端:可以,但是那样做 ...
- 【原创】2022年linux环境下QT6不支持中文输入法解决方案
1.配置环境 export PATH="~/目录/Qt/6.x.x/gcc_64/bin":$PATH export PATH="~/目录/Qt/Tools/Cmake/ ...
- (6) JavaScript - Math对象与日期对象
1 认识对象 概念:对象就是一种类型,一种引用类型,而对象则是引用类型的实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,通常它也被称作类. 面向过程思想:只考虑过程 ...