参考:


1、支持的数据类型有哪些?
①String ②List ③Set ④Hash ⑤Zset

2、为什么要用Redis,一般都有哪些使用场景?
①高性能:查询结果比较慢的,使用Redis比较快
②高并发:多个请求都直接到数据库查询,数据库会挂的

3、Redis 为什么是单线程的?为了快
a,数据都在内存中,单线程操作更快,上下文切换很浪费时间
b,redis作为单进程模型的程序,为了充分利用多核CPU,常常在一台server上会启动多个实例。
而为了减少切换的开销,有必要为每个实例指定其所运行的CPU。Linux 上 taskset 可以将某个进程绑定到一个特定的CPU

4、Redis为什么这么快?
a,redis是纯内存操作,读写比较快
b,非阻塞I/O:Redis采用epoll作为IO多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了时间,不在I/O上浪费过多的时间。
c,单线程避免了线程切换和竞态产生的消耗
d,c语言写的

5、Redis过期删除策略?
参考(一定要看一遍):
①定时删除: 设置过期时间,时间到了就删除(用定时器删除)-----删除及时,但是同时过期比较多占用过多的CPU
②惰性删除: 设置过期时间,时间到了不管,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key。
③定期删除: 设置一个循环周期,每次对所以通常情况下Redis的过期删除策略就是:惰性删除和定期删除两种策略配合使用。

6、Redis的内存淘汰机制?
参考:
https://www.jianshu.com/p/b1b4eeccc140 内存淘汰机制是指:redis中的数据已经超过我们所设置的最大内存了,此时再有新的数据到来,Redis是怎么执行的
如何配置淘汰机制: 通过配置redis.conf中的maxmemory-policy 如 maxmemory-policy noeviction
内存淘汰策略旧版本有6中 新版本有8中
a,noeviction : 不删除 直接报错
b,volatile-ttl: 从配置了过期时间的key中删除即将过期的值
c,volatile-random:从设置了过期时间的key中随机删除一个key
d,allkeys-random:从所有key随机删除
e,volatile-lru : 从设置了过期时间的key中,删除使用最久没用的
f,allkeys-lru: 从所有key中移除最久没用的
g,volatile-lfu:从所有配置了过期时间的键中驱逐使用频率最少的键()
h,allkeys-lfu:从所有键中驱逐使用频率最少的键

参考: 
lru算法(最近最久未使用):每次命中的都放在最前面
lfu算法(最近最少使用): 访问频率最低的放最后面

7、什么是缓存穿透?怎么解决?
查询一个一定不存在的数据,所有的请求直达数据库,数据库挂了
解决方案:
a,业务层直接过滤打回
b,不存在的数据,设置空结果在redis中缓存,但设置的过期时间应该比较短
d,布隆过滤器: 布隆过滤器是一种数据结构

8、什么是缓存击穿?该如何解决?
热点key失效的同时,瞬间大量的请求直达数据库
解决方案:
a,设置热点数据永不过期
b,热点数据定时更新
c,互斥锁,获取数据为空时先上锁,然后从数据库中捞数据,加载完之后再释放锁

9、什么是缓存雪崩?该如何解决?
缓存同一时间大面积失效,或者redis宕机,大量请求直达数据库
解决方案:
a,设置key值过期时间增加一个随机数,让过期时间均匀分布
b,数据预热,对于即将来临的大量数据,提前走一遍系统,将数据缓存在redis中
c,使用哨兵模式,或者集群模式,防止Redis单点故障

10、Redis怎么保证缓存和数据库数据的一致性?
参考:

11、Redis 持久化有几种方式?
RDB持久化(快照形式)
AOF持久化(操作日志以追加的方式写入文件)
参考:

12、Memcache与Redis的区别都有哪些?
参考:

13、Redis 常见性能问题和解决方案?
参考:

14、redis 主从复制如何实现的?
同步分为:增量同步和全量同步
参考:

15、Redis集群的原理是什么?
参考:https://www.jianshu.com/p/84dbb25cc8dc
集群三种模式(多读读):https://zhuanlan.zhihu.com/p/145186839

16、Redis 怎么实现分布式锁?
参考:
https://www.jianshu.com/p/c970cc71070b SETNX+getSET 注意如何解决死锁 如何解决重入

17、Redis 6.0 新特性

28、getbit和setbit
参考: