1缓存,作用,高性能和高并发
2常见的缓存问题:
3 redis是单线程工作模型 nio异步模型
redis的线程模型
文件事件处理器的结构包含4个部分:多个socket,IO多路复用程序,文件事件分派器,事件处理器(命令请求处理器、命令回复处理器、连接应答处理器,等等)。
2)文件事件
3)文件事件处理器
连接redis,socket关联连接应答处理器
写redis,socket关联命令请求处理器
读redis,socket关联命令回复处理器
4为啥redis单线程模型也能效率这么高?
1)纯内存操作
2)核心是基于非阻塞的IO多路复用机制
3)单线程反而避免了多线程的频繁上下文切换问题(百度)
1.6.12.Reactor模式
4 redis的过期策略都有哪些?
1定期删除:
2惰性删除:
3内存淘汰
5 如何保证Redis的高并发和高可用
redis高并发:主从架构,一主多从
redis高可用:主从架构部署加上哨兵
redis集群
6 redis持久化:RDB,AOF
RDB (Redis DataBase)
2、RDB持久化机制的优点
3、RDB持久化机制的缺点
AOF (Append Only File)
4、AOF持久化机制的优点
5、AOF持久化机制的缺点
总结对比
6、RDB和AOF到底该如何选择
总结
Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。
RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。
AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。
Redis 针对 AOF文件大的问题,提供重写的瘦身机制。
若只打算用Redis 做缓存,可以关闭持久化。
若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。
7缓存雪崩与穿透
缓存雪崩
缓存穿透的解决方法
8如何保证缓存与数据库的双写一致性?
1初级双写一致性模式,cache aside pattern
2数据库与缓存更新与读取操作进行异步串行化
3采用延时双删策略
2.12.1.1.3.异步更新缓存(基于订阅binlog的同步机制)
9redis的并发竞争问题该如何解决吗?
当某个系统多实例,同时获取一个key,修改值之后再写回去缓存,只要顺序错了,缓存中数据就错了。
分布式锁1 利用zookeeper获取分布式锁,当一个系统获取锁,其他系统只能等待释放锁。通过锁写入值的时间戳必须比已有数据的时间戳新才能写入.
分布式锁确保同一时间只能有一个系统实例在操作某个key。每次要写之前都先判断一下当前这个value的时间戳是否比缓存里的value的时间戳更新,则可写入
分布式锁2 利用Redis事务实现,使用较少一般用方案一