Redis 16道题
- 1. Redis是什么?都有哪些使用场景?
- 2. Redis的常用命令有哪些?
- 3. Redis是单线程还是多线程的?为什么?
- 4. Redis持久化有几种方式?如何配置?
- 5. Redis支持的数据类型有哪些?其中一个String类型最多存储多大数据?
- 6. 如何保证Redis缓存数据和数据库数据保持一致?
- 7. Redis如何实现分布式锁?
- 8.redis集群的搭建⽅式?(如哨兵集群模式如何搭建)
- 9. redis集群备份数据的时候会不会影响对外提供服务,为什么?
- 10.怎么把新的redis加⼊到集群中?
- 11. redis集群中插槽有多少个?怎么计算?(哈希槽计算出节点分配)
- 12. Redis的过期键的删除策略(常问)
- 13. 内存淘汰策略(常问)
- 14. Redis线程模型,单线程为什么快?
- 15. 简述redis事务实现
- 16.缓存雪崩、缓存穿透、缓存击穿(常问)
1. Redis是什么?都有哪些使用场景?
2. Redis的常用命令有哪些?
3. Redis是单线程还是多线程的?为什么?
单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),
即一个线程处理所有网络请求,其他模块仍用了多个线程。
4. Redis持久化有几种方式?如何配置?
RDB持久化
AOF持久化
5. Redis支持的数据类型有哪些?其中一个String类型最多存储多大数据?
6. 如何保证Redis缓存数据和数据库数据保持一致?
设置有效期 : 给缓存设置有效期,到期后自动删除
同步双写 : 在修改mysql数据库的同时,直接清理缓存;
异步通知:
当MySQL数据库中数据发送变化后,发送一个消息,相关服务监听到消息后清理缓存数据
基于MQ的异步通知
基于Canal的通知
7. Redis如何实现分布式锁?
8.redis集群的搭建⽅式?(如哨兵集群模式如何搭建)
9. redis集群备份数据的时候会不会影响对外提供服务,为什么?
不会因为是异步的备份的,RDB的bgsave
10.怎么把新的redis加⼊到集群中?
集群伸缩:
分片集群动态添加和删除节点
重新分配插槽范围
11. redis集群中插槽有多少个?怎么计算?(哈希槽计算出节点分配)
redis的槽是redis_Cluster集群中的概念,一共有16384个槽,槽就是用来存储数据的。当一个key过来时,使用一种类似于hash的算法算出一个值,然后对16384进行取模
12. Redis的过期键的删除策略(常问)
13. 内存淘汰策略(常问)
14. Redis线程模型,单线程为什么快?
纯内存操作
核心是基于非阻塞的IO多路复用机制 : epoll poll
单线程反而避免了多线程的频繁上下文切换带来的性能问题