首页 > 数据库 >Redis缓存淘汰策略

Redis缓存淘汰策略

时间:2023-11-16 21:34:41浏览次数:30  
标签:缓存 Redis unsigned lru allkeys LRU 淘汰 volatile

八个淘汰策略

  • volatile-random
  • volatile-lru
  • volatile-lfu
  • volatile-ttl
  • noeviction
  • allkeys-lru
  • allkeys-random
  • allkeys-lfu

lru

标准LRU算法是由双向链表及Hash表实现,具体代码实现可以参考LRU算法

Redis中的LRU算法实现有所变化:

  1. Reids没有使用双向链表维护数据页的访问顺序,只使用了全局哈希表缓存数据
  2. 随机抽取N个数据,通过redisObject结构体中的lru值,取出最小的值进行淘汰。
    #define LRU_BITS 24
    typedef struct redisObject {
    	unsigned type:4;
    	unsigned encoding:4;
    	unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or
    							* LFU data (least significant 8 bits frequency
    							* and most significant 16 bits access time). */
    	int refcount;
    	void *ptr;
    } robj;
    

## 优点

没有严格按照最近最久未使用来进行淘汰,但是采用随机及lru思想,节省了大量的指针内存及调整操作时间,更多地考虑了空间及性能的优化。

# lfu

标签:缓存,Redis,unsigned,lru,allkeys,LRU,淘汰,volatile
From: https://www.cnblogs.com/kiper/p/17837220.html

相关文章

  • redis官方集群搭建
    1.下载releases7.2.0(最好下载源码在服务器编译):https://packages.redis.io/redis-stack/redis-stack-server-7.2.0-v6.rhel7.x86_64.tar.gz?_gl=1*jh1xlt*_ga*MTA3MjY3MzAyMi4xNjgwNzQ0NTE2*_ga_8BKGRQKRPV*MTcwMDEzNzc3NS41LjEuMTcwMDEzNzgwNi4yOS4wLjA.*_gcl_au*MTI3NTM4NTEwNi4xN......
  • Redis 缓存系统常见问题及解决方案(缓存击穿,缓存穿透,缓存雪崩)
    1、缓存穿透缓存穿透指当用户在Redis缓存系统执行一条无效查询时,这条无效查询将穿透Redis缓存系统并向MySQL数据库请求数据,而MySQL数据库也获取不到数据。黑客可以利用缓存穿透原理,恶意执行大量无效查询,这将会对MySQL数据库的访问造成很大的压力解决方法:1、缓存......
  • Redis7 数据持久化AOF
    1、官网介绍2、是什么以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录)只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作默认情况下,redis......
  • 简述几个我们对Redis 7开源社区所做的贡献
    Redis7已经于2022年4月28号正式发布,其中包括了将近50个新的命令,增加了许多新的特性,并且在整个Redis6到Redis7的开发过程中,我也对Redis的开源社区贡献了一些微薄的力量。在这篇文章中,我来给大家介绍几个自己亲身参与的几个Redis7功能,并希望能够为Redis8做出更多的贡献。在这......
  • 缓存雪崩/击穿/穿透
    缓存雪崩大量缓存同时过期,就叫缓存雪崩。缓存中有大量数据同时过期,导致大量请求缓存缺失redis实例宕机措施设置过期时间时,随机小范围打散服务降级缓存命令率下降到警告值或者数据库负载突然增大时,很可能发生了缓存雪崩。可以通过服务降级措施,来保证核心接口能正......
  • 缓存穿透方案之布隆过滤器
    作用:快速过滤掉不存在数据一种数据结构,特点是高效插入和查询,但是返回的结果是概率性的,不是确切的。使用场景:1.缓存穿透解决方案2.网络爬虫重复下载url解决方案3.HBase客户端查找列族文件数据问题解决方案。......
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
    2023年11月15日,对.net的开发圈是一个重大的日子,.net8.0正式版发布。圈内已经预热了有半个月有余,性能不断超越,开发体验越来越完美,早在.net5.0的时候就各种吹风Aot编译,直到6.07.0使用仍然比较麻烦,我个人比较期待本次更新的aot体验。有的群友几个小时都等不了啦,半夜就开始更新预......
  • prometheus Redis监控方法之二
    背景前期整理过使用exporter+prometheus方式进行Redis监控的搭建过程最近给同事研究clickhouse时发现clickhouse有对应的plugin可以直接拉取CK的信息当时就想其他的中间件肯定有类似的方法进行处理.当时第一反应是想学习使用Oracle,SQLSERVER的pluggin进行监控但是发......
  • go语言和redis实现发邮件
    如何使用Go语言和Redis实现邮件群发原创 磊丰 Go语言圈 2023-10-3108:30 发表于中国香港收录于合集#学Go语言哪些事儿236个MySQL大牛带你全面剖析与系统梳理数据库(mysql等)知识分享,总结数据库技巧和方法,提升你的技术技能。45篇原创内容公众号G......
  • Redis 缓存与数据库数据不一致问题
    Redis缓存与数据库数据不一致问题是指在使用Redis作为缓存系统时,由于缓存和数据库之间的操作没有同步或处理不当,导致缓存中的数据与数据库中的数据不同步,产生数据不一致的情况。现象:数据库更新后,缓存未更新,导致缓存中的数据是旧的。缓存脏读,即缓存中的数据被更新,而数据库中的数据未......