
目录
一、Redis 简介
二、常见面试点
1.Redis 和Memcached 的区别
2.为什么要用 Redis/为什么要用缓存?
3.Redis 没有使用多线程?为什么不使用多线程?
4.Redis 删除策略及内存淘汰机制
5.Redis 事务
6.Redis 缓存穿透
7.Redis 缓存雪崩
8.三种缓存读写策略
Redis 是一个用C 开发的数据库 ,它不仅可以用来做缓存,也可以用来做分布式锁,还有消息队列;它支持多种数据类型,还支持事务,持久化,Lua脚本,多种集群方案
共同点:
不同点
缓存数据的处理流程
Redis具有高性能高并发的有点,数据库MYSQL 的QPS 大概在1w 左右,而因为Redis 是直接操作内存的,所以它的QPS 可以达到 10w+ ,甚至最高能达到 30w+(就单机 redis 的情况,redis 集群的话会更高)
原因有三
删除策略:
但是仅仅是给key设置定期删除时间,会漏掉很多过期key的情况,为此就有了内存删除机制
内存淘汰有6种:
事务四大特性:原子性,持久性,隔离性,一致性
redis 只满足一致性性和隔离性,不满足原子性(不支持回滚)和持久性
命令:MULTI ,EXEC, WATCH, DISCARD
> MULTI OK > SET USER "测试" QUEUED > GET USER QUEUED > EXEC 1) OK 2) "测试"
1)缓存无效的key : 如果缓存和数据库都查不到,就写一个key到redis里面并设置过期时间
2)使用布隆过滤器
何谓缓存雪崩:缓存在同一时间内大面积失效,后面的请求落到数据库,数据库要在短时间内承受大量的请求
解决雪崩问题:
1)设置限流,避免大批量请求
2)采用集群的方式,避免单机问题出现整个缓存服务无法使用
3)缓存永不过期
4)热点缓存随机设置过期时间
1)旁路缓存模式 :
先读cache,cache 没有读数据库,然后拿数据库返回的数据更新cache ,这种模式适合读请求比较多的场景 ; 必须要先写DB ,然后再更新缓存,因为写缓存的速度比更新DB的快很多,这样有助于保持数据一致性
2)读写穿透模式
写穿透:
读穿透:
3)异步缓存写入
只更新cache ,不更新DB ,异步更新DB , 这种模式适合对数据时效性要求没有那么高的场景,例如网页流量量,点击量。
参考文献: Redis知识点&面试题总结 | JavaGuide