课堂课题:
什么叫命中率?正常来讲,命中率应该控制在多少?
关联任务:
任务五
直播时间:
2019-08-24 15:30:00
课堂内容:
视频链接:
PPT链接:
提交按钮:
小课堂内容格式
标题:
【修真院xx(职业)小课堂】课题名称
开场语:
大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX
(1)背景介绍:
背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。
(2)知识剖析:
讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。
(3)常见问题:
最少列出1个常见问题。
(4)解决方案:
写清楚常见问题的解决方案。
(5)编码实战:
尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。
(6)拓展思考:
知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。
(7)参考文献:
引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。
(8)更多讨论:
Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答
(9)鸣谢:
感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
【修真院java课堂】什么叫命中率?正常来讲,命中率应该控制在多少?
开场语:
大家好,我是IT修真院深圳分院第16期的学员刁宏扬,一枚正直纯洁善良的java程序员,今天给大家分享一下,修真院官网java(职业)任务6,深度思考中的知识点——什么叫命中率?正常来讲,命中率应该控制在多少?
(1)背景介绍:
缓存命中率
命中:可以直接通过缓存获取到需要的数据。
不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存已经过期。
通常来讲,缓存的命中率越高则表示使用缓存的收益越高,应用的性能越好(响应时间越短、吞吐量越高),抗并发的能力越强。
影响缓存命中率的几个因素
缓存适合“读多写少”的业务场景,反之,使用缓存的意义其实并不大,命中率会很低。
业务需求决定了对时效性的要求,直接影响到缓存的过期时间和更新策略。时效性要求越低,就越适合缓存。在相同key和相同请求数的情况下,缓存时间越长,命中率会越高。
影响缓存命中率的几个因素
1、缓存的设计(粒度和策略)
通常情况下,缓存的粒度越小,命中率会越高。
当数据发生变化时,直接更新缓存的效率比删除缓存(或让缓存过期)的命中率更高。
时效性,访问频率。
缓存读取简图
影响缓存命中率的几个因素
2、缓存容量和基础设施:
影响因素,缓存的大小,缓存的技术选型(内置本地缓存,分布式缓存),缓存框架的选择
如何监控缓存的命中率
在memcached中,运行state命令可以查看memcached服务的状态信息,其中cmd_get表示总的get次数,get_hits表示get的总命中次数,命中率 = get_hits/cmd_get。
redis中可以运行info命令查看redis服务的状态信息,其中keyspace_hits为总的命中中次数,keyspace_misses为总的miss次数,命中率=keyspace_hits/(keyspace_hits+keyspace_misses)。
不需要写入缓存的情况
1、业务数据不常用(相对的),会导致命中率低,就没有必要写入缓存
2、如果写操作多,频繁需要写入数据库,也没有必要使用缓存;
3、数据量大,储存过大文件会给缓存带来很大压力。
memcached特点
1.实现分布式缓存(支持热部署),通过hashcode根据缓存服务器ip智能分配将数据缓存到的服务器上。
2.实现最近最少访问的数据优先被移除缓存。
3.快速找到适配的存储空间,避免内存的浪费。
4.使用键值对存储数据,方便读取修改等缓存的管理。
5.socket通信,缓存服务器和应用服务器分离。
memcached内部机制
储存:内存(照预先规定的大小, 将分配的内存分割成各种尺寸的块(chunk),
并把尺寸相同的块分成组。
各个尺寸的chunk大小是通过其增长因子(growth factor)来决定的,
默认增长因子为1.25。下一个尺寸的chunk大小=之前一个chunk大小*增长因子。)
Memcached的设计哲学
1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
3. 各服务器间彼此无视:不在服务器间进行数据同步;
4. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;
Redis 和 Memcached的不同
Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。
内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis。
参考文献:
https://www.cnblogs.com/dinglang/p/6117309.html
https://www.zhihu.com/question/19829601/answers/updated
https://blog.51cto.com/xslwahaha/1627129
更多讨论:
Q1:提问:Mencached的分布式有哪几种。
A1:回答:取模算法,根据服务器台数的玉树进行分散,求得键的整数哈希值,在除以服务器台数,根据余数来选择服务器。
一致性算法,把服务器的各个节点放到中部的各个时刻上,同时也要使用另一种分布式算法,即一致性hash算法,就是把服务器各个节点放到钟表的各个时刻上,同时也要储存的key页映射到钟表的某个时刻上,该key沿钟表顺时针走,碰到第一个比他小的节点之后key就落在这台服务器上。
Q2:提问:命中率的大小一般控制到多少
A2:回答:安装cpu的标准(1+80%)*(1+80%)以上吧。
Q3:提问人:缓存介质有哪些
A3:回答:内存,硬盘,数据库
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
[深圳|结业弟子]JAVA-廖志鹏 发表于 2019-10-28 21:56:29 #1
这个概念没这么接触过,不是很懂其应用场景
回复