Redis面试题

  • 简述Redis 

 Redis是基于内存的数据库,对数据的读写操作都在内存中完成,所以读写速度特别快,常用于缓存、队列、分布式锁等应用场景。并且它提供了多种数据类型来支持不同的业务场景、对数据类型的操作都是原子性,不存在并发竞争的问题。Redis还支持事务、持久化、Lua脚本,多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布订阅模型、内存淘汰机制、过期删除机制。

  • Redis 和 Memcached 的区别:

  1. Redis支持复杂的数据类型而Memcached只提供了简单的字符串
  2. Redis原生支持集群模式 , Memcached不支持原生集群 主从复制集群 哨兵集群 Cluster集群
  3. 网络IO模型不同 Memcached 是多线程,非阻塞 IO 复用的网络模型 Redis 使用单线程的 IO 复用模型
  4. 持久化存储 Memcached 不支持持久化存储,重启时,数据被清空。 Redis 支持持久化存储,重启时,可以恢复已持久化的数据
  •  为什么 Redis 单线程模型效率高

  1. C 语言实现。
  2. 纯内存操作。 Redis 为了达到最快的读写速度,将数据都读到内存中,并通过异步的方式将数据写入磁盘。 所以 Redis 具有快速和数据持久化的特征。 如果不将数据放在内存中,磁盘 I/O 速度会严重影响 Redis 的性能。
  3. 基于非阻塞的 IO 多路复用机制。
  4. 单线程,避免了多线程的频繁上下文切换问题。 Redis 利用队列技术,将并发访问变为串行访问,消除了传统数据库串行控制的开销。
  5. 丰富的数据结构。
  •  Redis的持久化方式:

Redis提供了两种数据持久化到硬盘的方式

RDB持久化(全量):在指定的时间间隔内将内存中数据集快照写入磁盘

AOF持久化(增量):以日志的形式记录服务器所处理的数据操作

Redis4.0支持混合持久化

  • Redis的数据过期策略

  1. 惰性删除:设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key。对CPU友好,内存不友好。
  2. 定时删除:创建一个定时器,当key设置的过期时间一过期,定时器任务立即执行对键的删除。对内存友好,CPU不友好。
  3. 定期删除:是上述两者的折中方案,它会周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度。这种方法可以为CPU性能设置峰值,检测频度可以自定义设置,对内存的压力也不是很大,长期占用内存的数据会被持续性清理。
  •  Redis的数据淘汰策略

 当Redis中的内存不够用时,此刻向Redis中添加新的key,Redis会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称为内存的淘汰策略。

noeviction # 不删除任何数据,内存不足直接报错
(默认策略)
volatile-lru # 挑选最近最久使用的数据淘汰(举例:
key1是在3s之前访问的, key2是在9s之前访问的,删除的就是key2)
volatile-lfu # 挑选最近最少使用数据淘汰 (举
例:key1最近5s访问了4次, key2最近5s访问了9次, 删除的就是key1)
volatile-ttl # 挑选将要过期的数据淘汰
volatile-random # 任意选择数据淘汰
allkeys-lru # 挑选最近最少使用的数据淘汰
allkeys-lfu # 挑选最近使用次数最少的数据淘汰
allkeys-random

LRU(Least Recently Used)最少最近使用。用当前时间减去最后一次访问时间, 这个值越大则淘汰优先级越高。

LFU(Least Frequently Used)最少频率使用。会统计每个key的访问频率,值越 小淘汰优先级越高。

volatile:表示设置了带过期时间的key allkeys:表示所有的key

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿究院懒羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值