简单总结哈,LRU+双向链表实现缓存, 和Redis的

 1. Least Recently Used   

最近最少使用淘汰机制, 访问一个key在map中,也就是 在内存中, 就将此页放到建表头部, , 不在内存中, (假如规定链表只能有三个节点, 当访问第四个时, 如果值不在内存中, 那就释放链表最尾部的节点, 然后将此值包装成节点, 放入头部)  就先去磁盘取.    

2. 为什么不使用双向链表   

使用双向链表, 每个节点会增加两个指针的空间消耗

3. redis不使用链表, 那用什么结构或者属性实现LRU淘汰策略

redis采用设置  全局 server-lruclock   时钟,  每个节点有一个  lru时间戳    属性, 类似于两个时间戳

1. 访问节点时候会将server-lruclock 复制给lru , 避免系统调用, 造成上下文切换

2. 而 全局的server-lruclock跟根据全局变量server.hz来调用系统操作实现更新

4. redis采用的一些内存策略

1. 定期删除+惰性删除

定期删除 , 每隔一定时间, 根据maxmemory_samples设置的个数,  选取这么多节点进行检查过期,  一次性检查全部, 会造成卡顿

惰性删除, 你访问一个key, 会看看过期没, 过期了就删除

4.1 那内存还是会满怎么办, 那就出现淘汰策略

Redis系统提供五种淘汰策略,即参数maxmemory_policy有五种取值:

noeviction: 如果缓存数据超过了maxmemory限定值,并且客户端正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值