论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
SqlServer
›
分布式系统架构7:当地缓存
分布式系统架构7:当地缓存
吴旭华
金牌会员
|
6 小时前
|
显示全部楼层
|
阅读模式
楼主
主题
829
|
帖子
829
|
积分
2487
这是小卷对分布式系统架构学习的第10篇文章,在开始学习分布式缓存之前,先来学习当地缓存的理论底子,相识为什么需要用缓存
1.引入缓存的影响
我们在开辟时,用到缓存的情况,无非就是为了淘汰客户端对相同资源的重复请求,低落服务器的负载压力。引入缓存后,既有利益也有弊端
引入缓存负面影响:
开辟角度,增长了系统复杂度,需思量缓存失效、更新、同等性题目
运维角度,缓存会掩盖一些缺陷题目
安全角度,缓存大概泄密某些保密数据
引入缓存的来由:
为了缓解CPU压力
,将实时计算运行结果存储起来,节流CPU压力
为了缓解I/O压力
,将原来对网络、磁盘的访问改为对内存的访问
2.缓存的属性
选择缓存时,主要思量吞吐量、命中率、扩展功能、分布式支持。 前3个这篇文章会讲,下一篇再讲分布式缓存
2.1吞吐量
并发场景下,每秒操作数OPS,反映了缓存的工作服从
如Java8并发包的ConcurrentHashMap,线程安全实现原理是CAS+synchronized锁单个元素。但是该类仅有缓存功能,没有命中率、淘汰计谋、缓存统计等功能
并发场景下,不可制止的会有读写数据带来的状态竞争题目,当前有2种处理套路:
以Guava Cache为代表的同步处理机制
:在访问缓存数据时,一并完成缓存淘汰、统计、失效等状态变更操作,通太过段加锁等优化手段来尽量淘汰数据竞争。
以Caffeine为代表的异步日志提交机制
:参考经典的数据库设计理论,把对数据的读、写过程看作是日志(即对数据的操作指令)的提交过程。
Caffeine使用了环形缓冲区来记录状态变动日志,为进一步淘汰数据竞争,Caffeine给每个线程都设置了专用的环形缓冲区,如下是Wikipedia上的环形缓冲示意:
环形缓冲区结构中,读取和写入是一起进行的,只要读取指针不落伍于写指针一圈,这个操作可以永久进行下去,容纳无穷多的新字符。
如果不满足,则必须壅闭写指针,等候读取清空缓冲区
2.2 命中率与淘汰计谋
缓存的容量是有限的,也因此需要主动地实现淘汰低价值目标,也就是缓存淘汰计谋
主要实现方案有三种:
第一种:FIFO(First In First Out)
即
优先淘汰最早进入被缓存的数据
。FIFO 的实现十分简单,但一般来说,越是频繁被用到的数据,每每越会早早地被存入缓存之中。
以是这种淘汰计谋,很大概会大幅低落缓存的命中率
第二种:LRU(Least Recent Used)
即
优先淘汰最久未被使用访问过的数据
。LRU 通常会采取 HashMap 加 LinkedList 的双重结构(如 LinkedHashMap)来实现。每次缓存命中时,将命中对象调整到LinkedList的头部,每次淘汰从链表尾部清算
存在题目:如果热门数据一段时间没被访问,就会被淘汰;
第三种:LFU(Least Frequently Used)
优先淘汰
最不经常使用的数据
。LFU 会给每个数据添加一个访问计数器,每访问一次就加 1,当需要淘汰数据的时候,就清算计数器数值最小的那批数据。
缺点:每个数据都需要维护计数器,未便于处理随时间变革的热门数据
以上只是列了三种底子的淘汰计谋,实际Caffeine 官方还订定了两种高级淘汰计谋:ARC(Adaptive Replacement Cache)和LIRS(Low Inter-Reference Recency Set),更复杂的淘汰计谋都是为了提高命中率的。
3.扩展功能
缓存不是只实现一个Map接口就可以的,还需要一些额外的功能,下面列出缓存的扩展功能:
加载器
:从被动放入,变为主动通过加载器去加载指定 Key 值的数据
淘汰计谋
:支持用户根据需要自行选择淘汰计谋
失效计谋
:缓存数据在超过一定时间内主动失效,Redis的计谋是定时删除、定期删除、惰性删除
事件通知
:提供事件监听器,在数据状态变动时进行一些额外操作
并发级别:如Guava Cache通太过段加锁来实现缓存的并发设置
容量控制:设置初始容量和最大容量
统计信息:命中率、平均加载时间、主动接纳计数等信息
持久化:将缓存数据存储到数据库或者磁盘
4.当地缓存对比
ConcurrentHashMapEhcacheGuava CacheCaffeine访问控制最高一般精良优秀(靠近ConcurrentHashMap)淘汰计谋无多种:FIFO、LRU、LFU等LRUW-TinyLFU扩展功能无,只有底子访问接口并发控制、失效计谋、容量控制等同左同左
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
吴旭华
金牌会员
这个人很懒什么都没写!
楼主热帖
mamba-ssm安装building wheel卡着不动 ...
《原CSharp》第二回 巧习得元素分类 子 ...
数据库系统课程设计(高校成绩管理数据 ...
使用TrueNas(FreeNas)进行华为手机备 ...
Spark 总复习
JVM虚拟机性能监控与故障处理工具(3) ...
Vue3-使用axios发起网络请求
java中==和equals区别
AWVS漏洞扫描器的使用
【图论】—— 有向图的强连通分量 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表