Redis面试
1、redis是什么?
2、redis的优缺点
3、为什么要使用缓存/为什么要使用redis
高性能
高并发
4、为什么使用redis,而不是map作为缓存
1)自带的map不能进行持久化,当服务宕机时,会导致数据的丢失
2)每个服务实例都会有自己的一个map,缓存不一致
3)redis可以做主从服务,提高服务的可用性,map不可以
5、Redis为什么这么快
6、Redis有哪些数据类型
7、Redis的使用场景
总结一
1)计数器:可以对String进行自增自减运算,从而实现计数器功能。Redis这种内存数据库的读写性能非常高,适合频繁读写的计数量
2)热点缓存
将热点数据缓存到redis中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率
3)会话缓存
使用redis做SpringSession来存储会话信息,一个用户可以访问多台应用服务器
4)全页缓存
5)查找表
6)消息队列(发布订阅功能)
List是一个双向链表,可以通过lpush和rpop写入和读取消息
7)分布式锁
在分布式场景下,无法使用单机中的锁来对多个节点上的进程进行同步。可以使用Redis来做分布式锁
8、什么是Redis持久化
持久化指的是将内存中的数据持久化到磁盘上,保证服务宕机后数据的恢复
9、Redis的持久化机制
Redis提供了两种持久化机制 RDB 和 AOF
RDB:Redis DataBase缩写
RDB是Redis默认的持久化 方式,按照一定的时间将内存中的数据以快照的形式保存到硬盘中,对用产生的数据文件为 dump.rdb。通过配置文件中的save参数来定义快照的周期
RDB的优点和缺点
1、只有一个文件 dump.rdb,方便持久化
2、性能最大化,fork子进程来完成写操作,主进程继续处理命令,所以是IO最大化。使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能
3、相对于数据集大时,比AOF的启动效率更高
缺点:
1、数据安全性低:RDB是间隔一段时间进行持久化,如果持久化之间 redis发生故障,会发生数据丢失,所以这种持久化方式适合数据要求不严谨的时候
AOF:Append Only File
是将Redis执行的每次写命令记录到单独的日志文件中,当重启redis时,会执行日志文件中命令已达到恢复数据的效果
AOF的优点
1、数据安全,aof持久化可以配置appendfsync 属性,当配置为always,每进行一次命令操作就会记录到aof文件中
2、通过append模式写文件,即使中途服务器宕机,可以通过 redis-check-aof解决数据一致性问题
缺点:
1、aof比rdb文件大,且恢复速度慢
2、数据集大的时候,比rdb启动效率低
如何选择合适的持久化机制
10、Redis的动态扩容,缩容
11、Redis过期键的删除策略
Redis过期策略就是指当Redis中缓存的key过期了,Redis该如何处理
过期策略通常有以下三种:
-
定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好,但是会占用大量的cpu资源去处理过期的数据,从而影响缓存的响应时间和吞吐量
-
惰性过期
-
定期过期
Redis中同时使用了惰性过期和定期过期两种过期策略
内存相关
12、MySQL中有2000w数据,redis中只存20w数据,如何保证redis中的数据都是热点数据
redis内存数据集上升到一定大小的时候,就会实行数据淘汰策略
13、Redis的内存淘汰策略有哪些?
【总结】
Redis的内存淘汰策略的选取 并不会影响过期key的处理。内存淘汰策略用于处理内存不足时需要删除的数据。
过期策略用于处理过期的缓存数据
14、Redis主要消耗什么物理资源
内存
15、Redis的内存用完了会发生什么
如果内存使用完了,Redis的写命令会返回错误信息(但是读命令还是可以正常返回)。或者你可以配置内存的淘汰机制,当Redis达到内存上限时会删除掉旧的key
16、Redis如何过内存优化
可以好好的利用 Hash、list 、set 、sorted set 等集合类型的数据,因为通常情况下很多小的key-value可以使用更紧凑的方式放在一起。