缓存
2021-10-14 14:22:36 7 举报
AI智能生成
登录查看完整内容
redis缓存
作者其他创作
大纲/内容
为了兼顾访问性能和内存空间开销,建议的缓存容量为总数据量的15%-30%
noeviction
不会进行数据淘汰
volatile-random
volatile-ttl
volatile-lru(LRU:最近最少使用)
volatile-lfu(LFU:最不频繁使用)
在设置了过期时间的数据中进行淘汰
allkeys-lru
allkeys-random
allkeys-lfu
在所有数据范围内进行淘汰
如何处理淘汰的数据:对于脏数据,redis并不会把它们写回数据库,所以我们需要在数据修改时就将它写回数据库
有明显冷热数据区分:优先使用allkeys-lru
没有明显冷热数据区分:建议使用allkeys-random
有置顶的需求:可以使用volatile-lru
使用建议
淘汰策略
缓存和数据库的数据不一致问题(对于只读缓存)
避免给大量的数据设置相同的过期时间,或者给缓存数据的过期时间加上一个小的随机数,避免大量数据同时过期
服务降级:是指发生缓存雪崩时,针对不同的数据采取不同的处理方式。当业务应用访问的是非核心数据时,暂时停止从缓存中查询这些数据,而是直接返回预定义信息、空值或是错误信息;当业务应用访问的是核心数据时,仍然允许查询缓存,如果缓存缺失,也可以继续通过数据库读取。
服务熔断:是指在发生缓存雪崩时,为了防止引发连锁的数据库雪崩,甚至是整个系统的崩溃,我们暂停业务应用对缓存系统的接口访问。再具体点说,就是业务应用调用缓存接口时,缓存客户端并不把请求发给 Redis 缓存实例,而是直接返回,等到 Redis 缓存实例重新恢复服务后,再允许应用请求发送到缓存系统。
服务限流:在业务系统的请求入口前端控制每秒进入系统的请求数,避免过多的请求被发送到数据库。
构建Redis缓存主从集群
大量数据同时过期/缓存实例宕机
缓存雪崩
对于访问特别频繁的热点数据,不设置过期时间
访问非常频繁的热点数据过期
缓存击穿
缓存空值或者缺省值
使用布隆过滤器快速判断数据是否存在,避免从数据库中查询数据是否存在,减轻数据库压力
请求入口前端对请求合法性进行检查
缓存和数据库中都没有要访问的数据
缓存穿透
缓存雪崩、缓存击穿和缓存穿透
缓存
收藏
收藏
0 条评论
回复 删除
下一页