缓存一致性?
出现缓存不一致的原因主要是由于缓存不能够及时更新数据库的数据,导致一些线程读到了旧数据。
方案一:先更新数据库再删除缓存
这样在更新期间会有一些线程读到脏数据,但是之后都会读到新数据。
方案二:延时双删
在更新数据库之前,进行缓存删除,更新完成再在合理的时间再进行缓存的删除。
方案三:设置缓存过期时间
给redis加上缓存过期时间,当过期后就会去出数据库查询最新数据
方案四:异步更新缓存
通过订阅数据库的binlog,一旦数据库发生了更新数据的操作,就通过消息队列来更新redis缓存
方案五:通过加锁,来保证强一致性
如果读多写少可以通过读写锁来进行性能的提升
Redis支持的数据类型有哪些?
Redis支持的数据类型:string(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)
Redis为什么快?
redis的速度非常的快,单机的redis就可以支撑每秒10几万的并发,相对于mysql来说,性能是mysql的几十倍。速度快的原因主要有几点:
- 完全基于内存操作
- C语言实现,优化过的数据结构,基于几种基础的数据结构,redis做了大量的优化,性能极高
- 使用单线程,无上下文的切换成本
- 基于非阻塞IO多路复用机制
那为什么Redis6.0之后又改用多线程呢?
redis使用多线程并非是完全摒弃单线程,redis还是使用单线程模型来处理客户端的请求,只是使用多线程来处理数据的读写和协议解析,执行命令还是使用单线程。
这样做的目的是因为redis的性能瓶颈在于网络IO而非CPU,使用多线程能提升IO读写的效率,从而整体提高redis的性能。
知道什么是热key吗?热key问题怎么解决?
所谓热key问题就是,突然有几十万的请求去访问redis上的某个特定key,那么这样会造成流量过于集中,达到物理网卡上限,从而导致这台redis的服务器宕机引发雪崩。
针对热key的解决方案:
- 提前把热key打散到不同的服务器,降低压力
- 加入二级缓存,提前加载热key数据到内存中,如果redis宕机,走内存查询。
什么是缓存击穿、缓存穿透、缓存雪崩?
暂略。。