首页 > 数据库 >Redis面试题整理

Redis面试题整理

时间:2023-02-02 22:45:23浏览次数:43  
标签:面试题 删除 过期 Redis 键值 key 整理 冗余

Redis是单线程还是多线程?

Redis 6.0的版本之前的单线程是指网络IO和键值对读写是由单个线程去完成的.

而Redis6.0增加的多线程,是指Redis在网络请求的情况下是采用了多线程,而对键值对的读写操作还是由单线程去处理的,所以对于Redis中的数据而言,依旧是并发安全的

但是持久化、集群数据同步其实是由其他线程去进行完成的

Redis单线程为什么还能这么快?

1、命令执行基于内存操作,一般一条命令在内存中操作的时间是几十纳秒.

2、命令执行单线程,不需要担心线程切换开销.

3、采用了IO多路复用机制(Reactor)机制,提升了Redis的IO利用率

4、高效的数据存储结构:全局hash表及多种高效数据结构,比如:跳表、压缩列表、链表等.

Redis底层数据是如何用跳表来存储的?

比如zset如果以链表存储有序值,虽然插入数据很快,但是有一个缺陷,如果要寻找或是插入数据的位置比较靠后,需要从表头一个个顺序寻找,需要进行多次寻址,效率变低..

而跳表会给数据增加冗余索引,比如 1、2、3、4、5、6、7、8、9、10. 你想寻找8,就需要1->2->3->4->5->6->7->8(依次寻找),但是冗余了1、3、5、7、9的话,只需要查询1->3->5->7->8(先在上层冗余数据中寻找是否有大于该值的,如果下个数据比所要插入或是寻找的数据大则往下一层冗余字段寻找),类似于折半查找,能够减少查询的次数.并且在冗余的数据上可以再次进行冗余.

能够更快的寻找到对应的元素,并且插入和删除数据的速度还是非常快.

Redis Key过期了为什么内存没释放?

1、可能有后续对同一个key的set命令没有设置EX参数,进行覆盖了

2、Redis的过期key的处理策略有惰性和定时删除 惰性:当处理到过期key的时候会触发惰性删除策略,会进行删除key 定时删除:因为惰性删除无法保证冷数据能够被及时删除,所以还有定时删除策略来定期清除(默认每100ms)一批过期的key,并不会一次性将所有的key进行清除.

Redis Key没设置过期时间为什么被Redis主动删除了?

当Redis已用内存空间超过maxmemory限定时,会触发主动清除策略

a、针对设置了过期时间的key做处理:

  1.volatile-ttl :在筛选时会针对过期时间做筛选,过期时间越早的越先删除

  2.volatile-random:在设置过期时间的键值对中随机进行删除

  3.volatile-lru:使用lru算法筛选设置了过期时间的key进行删除

  4.volatile-lfu:使用lfu算法筛选设置了过期时间的键值对删除

b、针对所有的key做处理:

  5.allkeys-random:从所有键值对中随机选择并删除数据.

  6.allkeys-lru:使用lru算法从所有键值对中进行筛选删除.

  7.allkeys-lfu:使用lfu算法从所有键值对中进行筛选删除.

c、不处理

  8.noviction:不会删除任何数据,但是会拒绝所有的写操作并且返回错误提示,只响应读操作.

 

标签:面试题,删除,过期,Redis,键值,key,整理,冗余
From: https://www.cnblogs.com/youjunhui/p/17087535.html

相关文章

  • 【Redis集群】如何配置主从复制模式?
    目录前言概念环境配置(单机集群)基本查看命令开启三台服务前言默认情况下,每台Redis服务器都是主节点;由于个人服务器性能原因,以下的所有操作都是单机集群的概念!在实际工作......
  • 【Redis】如何实现发布订阅功能?
    目录前言前言Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接受消息。Redis客户端可以订阅任意数量的频道!......
  • spring boot + spring cache 实现两级缓存(redis + ehcache)
    前言本文参考了​​springboot+springcache实现两级缓存(redis+caffeine)​​。处理流程与​​springboot+springcache实现两级缓存(redis+caffeine)​​一致:事......
  • 数学建模比赛超全整理【数学建模有哪些比赛?】【全网最全数模整理】
    数学建模比赛每年有20多场,各大比赛的含金量究竟如何?大学生适合参加哪些竞赛?哪些是真正的国赛?今天为你全面解析,从竞赛简介、主办单位、竞赛级别、竞赛时间、报名费用、参赛人......
  • Linux基础:文件相关信息、文件索引信息、链接信息、系统时间、机器克隆、定时任务、par
    目录一、文件相关信息二、文件索引信息三、链接信息四、系统时间五、机器克隆六、定时任务七、paramiko模块八、公钥私钥九、paramiko其他操作十、代码封装十一、面试题回......
  • 面试题之List集合如何实现去重?
    关于List集合去重的问题其实是很简单的不过简单的问题要尽量考虑全面一些!要考虑JDK1.8的新特性实现List集合去重的三种方式:1、方式一直接定义一个方法循环遍历判断......
  • 测试面试题
    1、Beta测试与Alpha测试有什么区别?Betatesting(β测试),测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场。Alphatesting(......
  • [题解] P2685 [TJOI2012]桥 思路整理
    题目大意给一张\(n\)个点\(m\)条边的图,求删去一条边后最短路长度的最大值与对应删边方案数。思路首先考虑,如果删去的这条边不在原图最短路上,那么新图最短路长度与原......
  • Sql整理
    1:数据库数据库是以某种有组织的方式存储的数据集合。保存有组织数据的容器,通常是一个文件或者一组文件。SQL是StructuredQueryLanguage(结构化查询语言)的缩写。2:表......
  • Redis 学习笔记
    Redis是非关系型的键值对数据库,数据是存储在内存中的,读写速度很快,广泛用于缓存方向,也可用于数据库的持久化。MySQL是关系型的磁盘数据库。访问Redis的速度要更快一点,但受......