当前位置: 首页 > article >正文

【工作技术栈】通用的旁路缓存一致性缺陷以及解决方式

目录

  • 前言
  • 现象
  • 分析原因
  • 解决方法
  • 思考感悟

前言

如果你使用的缓存一致性不是“旁路缓存","写后删"的话,那么这篇文章可能就让您失望了,但是篇幅不长可以参考一下

现象

大多数缓存一致性解决方案都使用了旁路缓存,之前的工作在这方面的方案并没有特别大的出入,直到最近看到旁路缓存带来的一些问题时才饶有兴趣的看了看解决方案
首先看下旁路缓存的玩法:
在这里插入图片描述

分析原因

之前线上没出现过什么特别大的问题,也就没有想过这个方案可能会存在什么问题,后来有一次出现修改没有生效,但是重新登录后才生效的场景,这个时候才有心去分析一下,结果大致如下:

在这里插入图片描述

解决方法

核心原因:读取的时候回写过程由于缓存被删除,无法判断自己写的这个版本是否是新的还是老的
一句话解决方案:增加版本机制

具体解决策略如下:
在这里插入图片描述

思考感悟

几个优化点:
1、首先存储cache数据需要一个通用的数据结构来封装对于后续的拓展非常有帮助,每一个值即使是空值也可以用通用数据结构占位,这样既可以解决缓存一致性问题,还能够解决缓存穿透的问题

存在的问题:
1、以前删除的数据就不再占用空间,现在不存在的数据还会占用一定的数据结构空间,对缓存的存储压力会增加
2、版本机制的version复杂度也增加了,需要缓存底层并发支持版本号机制的判断,如果在业务代码中写通用的版本比对会仍然会造成业务代码获取的版本为老版本导致判断出错从而写入老数据的问题,所以该机制一定需要缓存底层支持,否则就需要加细粒度锁来支持。


http://www.kler.cn/news/366028.html

相关文章:

  • 【大模型理论篇】主流大模型的分词器选择及讨论(BPE/BBPE/WordPiece/Unigram)
  • 批处理操作的优化
  • 什么是域名?什么是泛域名?
  • 人工智能:未来生活与工作的变革者
  • 数字IC后端实现 | Innovus各个阶段常用命令汇总
  • BIO,NIO,直接内存,零拷贝
  • ERR_PNPM_LINKING_FAILED Error: EPERM: operation not permitted, rename...
  • Scaffold-GS: Structured 3D Gaussians for View-Adaptive Rendering
  • 【python】OpenCV—findContours(4.2)
  • 【Go语言】
  • 简述特征降维的几种方式
  • IDEA中一个窗口打开多个项目-区别于eclipse
  • Netty-TCP服务端粘包、拆包问题(两种格式)
  • 使用Flask实现本机的模型部署
  • 【制造业&电子产品】电脑电子元件检测系统源码&数据集全套:改进yolo11-TADDH
  • 【贪心算法】(第十四篇)
  • 【前端学习路线】从入门到进阶(含学习资料链接和笔记)
  • 架构师备考专栏-导航页
  • ceph rgw使用sts Security Token Service
  • 钡铼技术边缘计算2DIN2DO工业无线路由器R40A
  • 【动手学强化学习】part4-时序差分算法
  • 电脑技巧:路由器知识介绍
  • 基于MATLAB(DCT DWT)
  • OpenCV视觉分析之目标跟踪(1)计算密集光流的类DISOpticalFlow的介绍
  • ffmpeg视频滤镜:定向模糊-dblur
  • 实战-任意文件下载