加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.cn/)- 专有云、图像技术、经验、数据治理、专属主机!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

预测两会后中国经济新“风口”

发布时间:2021-02-21 17:53:37 所属栏目:传媒 来源:互联网
导读:5.1 缓存更新带来的数据不一致与脏读 缓存更新的常见策略有: 1、先更新数据库再更新缓存; 2、先更新数据库再删除缓存; 3、先删除缓存再更新数据库; 4、定时清理缓存; 5、有请求访问数据时,判断缓存是否过期,过期从数据库中刷新缓存。 在这几种方案中,如

5.1 缓存更新带来的数据不一致与脏读

缓存更新的常见策略有:

1、先更新数据库再更新缓存;

2、先更新数据库再删除缓存;

3、先删除缓存再更新数据库;

4、定时清理缓存;

5、有请求访问数据时,判断缓存是否过期,过期从数据库中刷新缓存。

在这几种方案中,如果修改缓存与数据库不在同一个事物中,就带来了数据不一致和脏读的问题。

对应方案1:先删除缓存再更新数据库,并且在同一个事物中。

对应方案2:缓存自动失效后,另外的异步线程进行缓存更新。

对应方案3:缓存更新在并发、分布式要考虑锁,redis天生就是单线程,比较有优势。

5.2 怎么做缓存预热

缓存预热是指在用户可访问服务之前,将热点数据加载到缓存的操作,这样可以有效避免上线后瞬时大流量造成系统不可用。

缓存预热的一般性策略:

1、开发个缓存刷新功能,手工刷新;

2、项目启动的时候自动进行加载(一般为字典表等数据量不大的数据);

3、设置个定时器,自动刷新缓存;

4、提前统计热点数据,事先批量加载到如redis这样缓存工具中。

5.3 缓存重建

缓存失效后,重建热点缓存,如果耗时较长,在重建过程中,性能、负载不好。

对应方案:

1、正常情况下,交错缓存失效时间,减轻缓存压力;

2、崩溃失效的情况下,可以使用带持久化功能的缓存来恢复,比如Redis;

3、如果是MongoDB则不太一样,它是采用mmap来将数据文件映射到内存中,所以当MongoDB重启时,这些映射的内存并不会清掉,不需要进行缓存重建与预热。

5.4 缓存雪崩与可用性

缓存雪崩:缓存在同一时间失效时,访问直达数据库层,可能导致DB挂掉、系统崩溃。

对应方案1:交错缓存失效时间或随机缓存失效时间。

对应方案2:主从热备(Redis sentinel)。

对应方案3:集群/水平切分(Redis Cluster、一致性哈希)。

5.5 缓存穿透

缓存穿透:持续高并发访问某个不存在的Key。

对应方案1:空值缓存。

对应方案2:布隆过滤器(bloom filter) + bitmap。穷举可能访问的数据放入bitmap中,使用hash访问。

5.6 缓存击穿

缓存击穿:热点Key失效,高并发请求,直击数据库。

缓存击穿与缓存穿透很相似,不同点是是缓存击穿前访问的是真实的热点数据,只是在某一刹那失效了,造成了击穿的效果。

这样看,它其实也是缓存雪崩的一个特例。与雪崩的区别即在于击穿是对于特定的热点数据,而雪崩是全部数据。

对应方案:多级缓存及交错失效时间 + LRU 淘汰算法。

对于热点数据进行二级或多级缓存,并对于不同级别的缓存设定不同的失效时间,缓解雪崩。

此外可使用LRU的变种算法LRU-K缓存数据。

5.7 缓存降级

缓存降级是服务降级中的一环。

在访问量剧增,导致服务出现问题时,为了保证核心服务可用,防止发生缓存雪崩,可进行服务降级。

以redis为例,比较常见的做法就是,不去数据库查询,而是直接返回默认值给用户。

缓存降级也可根据日志级别进行预案设置。



 

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读