Redis——面试题汇总2022

一、什么是Redis
Redis(Remote Dictionary Server)是一个使用C开发的高性能NoSql。数据都保存在内存中,读写速度很快(10w+次/秒)

二、Redis特点
优点:
支持事务
支持持久化(AOF、RDB)
数据类型丰富(String、Hash、List、Set、SortedSet)
读写性能优异(10w次/秒)
单线程执行
高性能(基于内存、支持主从复制)

缺点:
受内存大小限制
在线扩容较复杂

三、为什么不用Map、Guava做缓存?
因为Map、Guava是本地缓存,仅限当前JVM内使用,而Redis是分布式缓存

四、Redis应用场景
计数器、缓存、会话缓存、全页缓存、DNS之类的表、分布式锁、消息队列(消息队列建议用Kafka等的中间件)

五、Redis的持久化
1.RDB(Redis Database)
将内存中的数据以快照形式保存到磁盘中,产生的文件为dump.rdb。方便数据备份。

2.AOP(Append Only File)
将每次的写命令,保存到日志文件中。之后每次重启服务,都会跑一次日志文件中的写命令。保证了数据的安全性。

六、过期策略
1.定时过期
ttl变为0,则过期
2.惰性过期
key被访问时,才检查是否过期
3.定期过期
定期扫描出已过期的key

七、如何设置key的过期时间和将key永久有效
设置过期时间 expire
永久有效 persist

八、内存淘汰机制
当内存不够时,会触发内存淘汰。
1.对于全局的key
1.再写时报错
2.移除最近最少使用的key
3.随机移除key

2.对于设置了过期时间的key
1.移除最近最少使用的key
2.随机移除key

九、Redis实现异步队列
用List,生产用lpush,消费用lpop
当lpop没有数据时,可以用sleep,或者直接用blpop(相比于lpop,会阻塞)

十、String的最大长度
512M

十一、如何查许多个固定前缀的key
1.keys 一次返回,但因为redis是单线程,所以会阻塞服务
2.scan 需多次迭代返回,但不会阻塞服务,可能会出现重复的,且比keys慢

十二、Redis主从同步、读写分离
其实就是Master Slave模式(主写从读),需要修改redis.conf(redis服务的配置文件)
在这里插入图片描述

主节点设置:

// 指定端口
port  8088
// 配置 daemonize 为yes,修改为后台启动
daemonize yes
// 配置连接密码,可以设置可以不设置(我默认配置为123456)
requirepass 123456
// 配置 bind 配置需要连接机器的ip(这里设置的是全部都可以连接本节点)
bind 0.0.0.0

从节点设置:

// 配置该节点是谁的从节点  (slaveof 主节点ip 端口号)
slaveof 192.168.2.111 6379
// 配置 masterauth 主节点认证密码
masterauth 123456
// 从节点是否只读,默认yes
slave-read-only yes

设置完之后用redis-server启动服务,然后可以使用 info命令 查看节点信息

十三、哨兵(Sentinel)
 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。需要修改sentinel.conf(哨兵的配置文件)
 在这里插入图片描述

// 指定运行端口
port  212
// 监听指定的redis服务 ,且加上权重(权重用于之后计算用哪个作为新的master)
sentinel monitor mymaster 127.0.0.1 6380 2

之后 用redis-sentinel 启动sentinel(记得指定配置文件)

十四、Sentinel的工作方式:
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。
若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

十五、io多路复用机制
redis 是一个单线程却性能非常好的内存数据库, 主要用来作为缓存系统。 redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值