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

如何设计本地缓存、有哪些坑需要避免

背景

前一篇文章提到分布式缓存与本地缓存。 分布式缓存操作简单风险小, 能够服务共享缓存,提高系统整体的伸缩性和可用性。但能扛的量还是稍小一些, 本地缓存能扛极高的,特别是也有着非常优秀的程序 性能。 但同样本地缓存的风险也是最大的。 操作不慎,一致性,问题会非常大,而且会导服务的OOM。

设计本地缓存该注意 什么

本地缓存核心是K V形式的存储。在我的理解下核心有四个点:
第一个是你的数据结构K要保证唯一性, value尽量的精简。
第二个因为是本地的数据,要保证并发线程安全问题。
第三个是缓存数据的上限,不要太多, 而且必须要有淘汰策略,避免服务OOM。
第四个一定要有 过期时间, 避免数据一直被本地缓存,无法保证数据的最终一致。

常见的淘汰策略

最常见的FIFO、LRU、LFU这些。

都很好理解,第一个就是常见的队列,先进先出, 是复杂度最小的一个淘汰策略,虽然没有极端情况下是一个比较好的选择, 比如你缓存的数据,他就是跟着时间不断再更新。

LRU也比较常见,他的核心思想的是把最近的时间没有访问的数据淘汰掉, 实现也很简单,每次把新插入的缓存数据,或者说新访问缓存数据添加到列表的头部,当内存不够的时候把尾部的删除就好。

LFU是最小频次使用,每次会把使用次数最小的数据删掉。 相当于给每一个缓存的数据增加了一个计数功能,然后再按照计数进行排序。

如何避免本地缓存一致性问题

第一个就是,一定要给缓存的数据增加过期时间,避免长时间不过期。

第二个因为本地缓存,几乎每一台实例都会缓存一部分数据, 他不像分布式缓存一样可以共享缓存,所以如果要更新, 常见的有两种方案:
第一可以靠可以借助配置中心来实现, 可以异步监听配置中心的变化,每台实例更新自己的缓存数据。
第二是靠配置中心MQ的广播, key使用rocketMQ的消息分发, 将变化的配置实时的广播到每台实例。


文章转载自:

http://BqRKBbFn.Lysrt.cn
http://0QZtOw9n.Lysrt.cn
http://gqhFTa4g.Lysrt.cn
http://Nig8A5rO.Lysrt.cn
http://tOw0VTla.Lysrt.cn
http://gIAg5KWl.Lysrt.cn
http://ZHp7DsY4.Lysrt.cn
http://MmZa1CPi.Lysrt.cn
http://6K0W6eRx.Lysrt.cn
http://jUc0ig9W.Lysrt.cn
http://IOLtkWIs.Lysrt.cn
http://eUdkeHzZ.Lysrt.cn
http://FjqUD86M.Lysrt.cn
http://FbYg1ZfB.Lysrt.cn
http://pSp3tqkf.Lysrt.cn
http://kCu8Bagp.Lysrt.cn
http://akQgh9tZ.Lysrt.cn
http://Lkf0iU3P.Lysrt.cn
http://7gUAnEZl.Lysrt.cn
http://OZGzTdTF.Lysrt.cn
http://wileZZ2H.Lysrt.cn
http://UfzUMQQe.Lysrt.cn
http://okWuUK4z.Lysrt.cn
http://C5MozUVf.Lysrt.cn
http://d2jnYNeK.Lysrt.cn
http://XXkYowyU.Lysrt.cn
http://LU4DfOhz.Lysrt.cn
http://kJxspZor.Lysrt.cn
http://QgBS6dmI.Lysrt.cn
http://8Bmu6Alw.Lysrt.cn
http://www.dtcms.com/a/372285.html

相关文章:

  • 人力资源管理的思维方法学习笔记1
  • 【面试向】边缘计算基础介绍
  • digitalworld.local: TORMENT
  • MySQL数据库专用命令详细使用指南
  • Python3.12-slim版本
  • AI 生成式艺术重塑动漫角色创作:从技术逻辑到多元可能性(三)
  • 【面试向】元宇宙介绍
  • 硬件开发(4)—ARM裸机体系结构
  • Stream API三巨头:filter、map、collect
  • NAS可以干啥?好玩吗?
  • GDAL 在 Python 中的开发起步
  • RK3568编译linux内核遇到问题总结
  • React学习教程,从入门到精通, React 样式语法知识点与案例详解(13)
  • BiFormer注意力机制YOLOV8
  • 【算法】字符串专题
  • 谓语动词选择指南
  • JavaScript常见算法题分类
  • python---多态
  • 中兴B860AV3.2-M/B860AV3.1-M2-内存大小区分参考指南
  • 【开题答辩全过程】以 校园二手货物交易平台为例,包含答辩的问题和答案
  • 【PyTorch】图像多分类部署
  • 阿里云上启动enclave 并与宿主机通信
  • Python 多任务编程:进程、线程与协程全面解析
  • Wan系列模型解析--VACE
  • 关于学习的一些感悟
  • 如何在Python中使用正则表达式替换特定格式的文本?
  • 【正则表达式】 正则表达式断言(Assertion)是什么?
  • GD32入门到实战39--SRAM
  • [RootersCTF2019]I_<3_Flask
  • 多功能台灯设计与实现(论文+源码)