redis的过期策略都有哪些?

设置过期时间:

    set key 的时候,使用expire time,就是过期时间.指定这个key比如说只能存活一个小时?10分钟?指定缓存到期就会失效.

  redis的过期策略的话

      定期删除加惰性删除

    定期删除:redis默认是每隔100ms就会随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除,

        假设redis里放了10万个key,都设置了过期时间,你每隔几百毫秒,就检查10万个key,那redis基本上就死了,cpu负载会很高的,消耗在你的检查过期key上了。注意,这里可不是

        每隔100ms就遍历所有的设置过期时间的key,那样就是一场性能上的灾难。实际上redis是每隔100ms随机抽取一些key来检查和删除的。

    惰性删除:在你获取某个key的时候,redis会检查一下 ,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除,不会给你返回任何东西。

    并不是key到时间就被删除掉,而是你查询这个key的时候,redis再懒惰的检查一下

      通过上述两种手段结合起来,保证过期的key一定会被干掉。

    但是实际上这还是有问题的,如果定期删除漏掉了很多过期key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期key堆积在内存里,导致redis内存块耗尽了,

        咋整?

内存淘汰机制都有哪些?

    noeviction:当内存不足以容纳新数据时,新写入操作会报错.这个一般没人用.

    allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(不管是否过期)

    allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的key给干掉啊

    volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key 

    volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除

手写一下LRU代码实现?

public class LURCache<K,V> extends LinkedHashMap<K,V> {
private final int CACHE_SIZEL;
//这里就是传递进行最多能缓存多少数据
public LURCache(int cacheSize){
//这里就是设置一个hashmap的初始大小,
// 同时最后一个true指的是让linkedhashmap按照访问顺序来进行排序,最近访问的放在头,最老访问的放在尾
super((int)Math.ceil(cacheSize/0.75)+1,0.75f,true);
CACHE_SIZEL=cacheSize;
} @Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
//这个意思就是说当map中的数据量大于指定的缓存个数的时候,就自动删除最老的数据.
return size()>CACHE_SIZEL;
}
}

redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现?的更多相关文章

  1. redis 的过期策略都有哪些?内存淘汰机制都有哪些?

    面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 r ...

  2. 4.redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?

    作者:中华石杉 面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当 ...

  3. redis的过期策略都有哪些?

    1.面试题 redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2.面试官心里分析 1)老师啊,我往redis里写的数据怎么没了? 之前有同学问过我,说我们生产环境的redi ...

  4. 搞定redis面试--Redis的过期策略?手写一个LRU?

    1 面试题 Redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2 考点分析 1)我往redis里写的数据怎么没了? 我们生产环境的redis怎么经常会丢掉一些数据?写进去了 ...

  5. Redis的过期策略和内存淘汰策略(转)

    Redis的过期策略 我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间.Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理. ...

  6. Redis的过期策略和内存淘汰策略

    Redis的过期策略:通常有三种,Redis中同时使用惰性过期和定期过期两种过期策略组合. 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除.该策略可以立即清除过期的数据 ...

  7. Redis的过期策略和内存淘汰机制

    过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...

  8. redis过期策略和内存淘汰机制

    目录 常见的删除策略 redis使用的过期策略:定期删除+惰性删除 定期删除 惰性删除 为什么要采用定期删除+惰性删除2种策略呢? redis内存淘汰机制 常见的删除策略 1.定时删除:在设置键的过期 ...

  9. Redis(六)--- Redis过期策略与内存淘汰机制

    1.简述 关于Redis键的过期策略,首先要了解两种时间的区别,生存时间和过期时间: 生存时间:一段时长,如30秒.6000毫秒,设置键的生存时间就是设置这个键可以存在多长时间,命令有两个 expir ...

随机推荐

  1. 使用SyncNavigator轻松实现数据库异地同步、断点续传、异构同步

    原文地址:https://blog.csdn.net/liushuijinger/article/details/7704410/ 最近一直在研究数据库同步的问题,在网上查了很多资料,也请教了很多人, ...

  2. PKUWC2020自闭记

    我才听说PKU今年对我省高二要求CSP分数>450? 我似乎丧失了一个溜去隔壁的机会? 机会是不存在的qwq THUWC3个数据结构直接送人升天 Day1 T1:感觉相邻的k!个排列是同构的可以 ...

  3. CentOS安装部署jumperserver(堡垒机)

    可以参考官方的文档:http://docs.jumpserver.org/zh/docs/introduce.html 测试环境 系统: CentOS 7 IP: 192.168.244.144 设置 ...

  4. maven设置阿里云仓库

    到maven安装目录的conf下setting.xml文件 找到mirrors标签中添加 <mirror> <id>nexus-aliyun</id> <mi ...

  5. Navicat 8 For Mysql 数据库的导出与加载

    方便断断续续的数据库实验课,避免每次都要重新写入数据,可使用Navicat的数据库导出功能 数据库的导出 1.选择要导出的数据库,右键点击“转存SQL文件”选项. 2.填写文件名字,选择位置,点击“保 ...

  6. TCP/IP学习笔记13--IP地址的构成,广播地址,IP多播,子网掩码

    现在,我是蔚蓝的 :在此岸或彼岸,我都是蔚蓝的.  ---李瑾 IP对应的是OSI模型中的网络层,TCP对应的是传输层.每一个参与通信的主机都会有一个IP地址. IP地址(IPv4地址)含4个字节,每 ...

  7. Mybatis中实体类属性与数据库列表间映射方法介绍

               这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四种方法方法,供大家参考.         Mybatis不像Hibernate中那么自动化,通过@Co ...

  8. python 之网络编程(基于TCP协议Socket通信的粘包问题及解决)

    8.4 粘包问题 粘包问题发生的原因: 1.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包),这样接收端,就难于分辨出来了,必须提供科学的拆包机制. ...

  9. AS3.0频谱-01

    AS3.0频谱系列-01: package fengzi.spectrum { //import fengzi.colors.GetColor; import flash.display.Sprite ...

  10. python基础_mysql建表、编辑、删除、查询、更新

    1.建一张学生表 包含(id,name,age,sex)2.增加四条数据3.查询表中sex为男的数据4.删除id =3的数据,5.将sex为女的,修改为男 create: CREATE TABLE d ...