项目中为什么要使用redis

你的项目中为什么要使用redis呢,相信主要是从性能和并发考虑。

优点

1.纯内存操作
2.单线程操作,避免了频繁的上下文切换
3.采用了非阻塞I\O多路复用机制

对于变动较少的数据,或者查询时间比较长的数据,我们可以将查询结果缓存到redis,这样请求就能够迅速响应。特别是秒杀系统,在这种高并发情况下,可以有效缓解数据库压力。

常见问题

1.缓存和数据库数据一致性问题
2.缓存雪崩问题
3.缓存击穿问题
4.缓存的并发竞争问题

内存淘汰策略

如果你的redis只能存储5G的数据,可是你写了10G,那么就会删除5G的数据,那么redis背后的数据淘汰策略就是—LRU算法,这个可以在redis.conf配置文件进行配置。

数据一致性

一致性问题分为最终一致性和强一致性,数据库和缓存双写数据,必然会带来数据一致性问题,如果对数据有强一致性要求,那么不建议放入缓存,我们只能保证最终一致性。

缓存穿透

缓存穿透即请求的数据缓存中不存在,导致所有的请求都到达数据库上,导致数据库异常。
1.利用互斥锁,缓存失效则要请求互斥锁去请求数据库,没得到锁的请求只能等待,另外需要在获取锁后,重新查看缓存是否已经被先前的请求设置成功,这样可以保证等待的请求可以重新从缓存中读取数据,而不是所有等待的请求都要请求数据库。
2.异步更新策略。无论是否读到数据都直接返回,如果没有读到值,则异步起一个线程去更新缓存。需要做缓存预热即项目启动前先加载缓存。

缓存雪崩

缓存雪崩即大量key同时过期,导致大量请求都请求到数据库,导致数据库异常。
1.给缓存的key增加一个随机时间值,避免集体失效过期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章