缓存策略在项目中的运用

Posted 阿飞录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存策略在项目中的运用相关的知识,希望对你有一定的参考价值。

接上篇文章《》,分析了Springcache 缓存源码以及使用规范。本篇文章结合实际项目中应用场景,讲述缓存策略以及开发过程中的细节。



项目中的问题


项目A中2个关键key各35w个,key1对应的val包含:基本配置信息、控制流程信息、运营策略信息等等,对象中约70个字段信息,用于业务逻辑处理和上层返回数据的组装。每次的请求经过缓存模版判断、更新等一系列操作。


通过Client请求类型分别讲述项目中缓存策略:

    • Read请求

      •        先读Cache,命中则返回结果

      •       未命中,读DataSource,然后将数据同步到Cache中


    •       Write请求

      •        先写DataSource

      •        然后更新Cache信息

缓存策略在项目中的运用


日常1wQPS,通过监控统计发现80%的key并不活跃, 试想每次Write请求要将多个关联对象组装进行缓存且key调用频次低,这种冷数据缓存的同步更新影响资源消耗。此外还应考虑到Cache更新失败的情况,造成数据不一致的情况。


解决方案


根据实际项目中缓存场景,降低操作的复杂度,采用Cache Aside Pattern 下的一种缓存策略。不同点:

    • Write请求:

      • 先写DataSource

      • 直接删除Cache        

缓存策略在项目中的运用


当前缓存策略模式基于懒加载的思想,在Spring、Mybatis中都有这种思想。只有用到对应的key才进行缓存,高频次下key的修改,很好的避免的资源的浪费。SpringCache 操作方式,指定要删除的key~


分布式缓存设计,结合实际业务场景,降低业务复杂度,避免过度设计。良好的缓存设计不仅可以提高Cache的响应速度,还提升业务场景的复用和拓展。


多级缓存一致性问题


在版本更新迭代和体量增加的过程中, 采取本地缓存+Redis的形式避免缓存穿透。项目分布式集群部署,Write请求更新Redis缓存,Node节点上的本地缓存数据不一致的情况。那么该如何解决这种情况呢?欢迎大家讨论~


你的每个赞和在看,我都喜欢!



以上是关于缓存策略在项目中的运用的主要内容,如果未能解决你的问题,请参考以下文章

基于Alluxio内存文件系统的缓存策略

如何更改 Okhttp 中的默认缓存策略?

从输出缓存提供的页面中的静态资产刷新策略

缓存策略,输出缓存与数据缓存还是两者兼而有之?

redis前传自己手写一个LRU策略 | redis淘汰策略

redis前传自己手写一个LRU策略 | redis淘汰策略