一、redis为什么这么快:
1、纯内存操作
2、单线程操作,避免了频繁的上下文切换
3、采用了非阻塞I/O 多路复用机制
二、redis使用中有哪些问题;
1、缓存和数据库双写一致性问题
2、缓存雪崩问题
3、缓存击穿问题
4、缓存并发竞争问题
三、redis问题解决方案:
1、缓存和数据库双写一致性问题解决方案
前提是对数据有强一致性要求,不能放缓存;
只能降低不一致发生的概率,无法完全避免;
只能保证最终一致性。
1)采用正确的更新策略,先更新数据库,再删缓存
2)可能存在删除缓存失败的问题,提供一个补偿措施:如利用消息队列。
2、缓存雪崩解决方案
(大并发项目,流量在几百万)
-利用互斥锁:会使吞吐量下降
-给缓存加失效时间:随机值,避免集体失效
-双缓存
3、缓存穿透解决方案
(大并发项目,流量在几百万)
-利用互斥锁
-采用异步更新策略,无论Key是否取到值都直接返回
-提供一个能迅速判断请求是否有效的拦截机制(布隆过滤器)
4、缓存并发竞争解决方案
-不要求顺序时,准备一个分布式锁,同时去抢锁,然后在set操作。
-要求顺序时,在数据写入数据库时,需要保存一个时间戳。
-利用队列,将set操作变成串行访问。
四、redis删除机制+内存淘汰机制:
采用定期删除+惰性删除策略;
在定期删除没能删除Key,也没有及时去请求Key(惰性删除没生效),这样redis内存会越来越高。此时应该采用内存淘汰机制。
redis 提供的6种数据淘汰策略:
noeviction
allkeys-lru:当内存不足以容纳新写入的数据时,在键空间中移除最近最少使用的Key.(推荐使用)
allkeys-random
volatile-lru
volatile-random
volatile-ttl
参考资料:
1、Redis入门指南
2、redis设计与实现
3、Redis实战用例目录
————End————