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的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系 ...
随机推荐
- 导出数据库表以及备注为excel
import com.alibaba.excel.annotation.ExcelProperty; import lombok.AllArgsConstructor; import lombok.D ...
- spring java枚举转json 方便前端取值
未处理前: "gender":"GenderEnum.FEMALE(code=2, gender=女)" 解决方法:使用jackson提供的注解 @JsonFo ...
- python Queue(队列学习)
Python 的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue.这些队列都实 ...
- vue3.0的生命周期函数
stetup(){}在 生命周期函数 系列中的优先级 〇setup(){ //优先级最高 处于created生命周期之前的函数,是无法访问data,methods中的数据是无法访问到的,setup中的 ...
- install package within python
import os os.system("pip install numpy") import subprocess subprocess.call(['pip3', 'insta ...
- PerfDog的使用教程
一.介绍: 移动全平台iOS/Android性能测试.分析工具平台,快速定位分析性能问题.PerfDog支持移动平台所有应用程序(游戏.APP应用.浏览器.小程序.小游戏.H5.后台系统进程等).An ...
- Python学习笔记W1
今天正式开始学习Python语言,学习方式观看教学视频,完成作业.视频共计28周,争取每天2天完成一周教学内容,共计56天,预计完成日期:2019-2-28. Owen写于2018-12-22 ...
- mysql 以自增id等于某个random()函数算出的值为条件查出两条数据
SELECT id FROM users WHERE id = FLOOR( rand() * ( (SELECT max(id) FROM users) - (SELECT min(id) FROM ...
- 【LuckyFrame研究】环境准备
LuckyFrame官方使用手册:http://www.luckyframe.cn/book/yhsc/syschyy-24.html LuckyFrame在码云平台或是GitHub上都是分成二个项目 ...
- IPAD做电脑的绘图板
方法:Microsoft远程桌面 即 RD CLIENT