幸运蛋蛋pc开奖
在本篇文章里小编给大家整理了关于怎么提高redis缓存命中率的相关知识点内容,有兴趣的朋友们跟着学习下。

缓存命中率的介绍

命中:可以直接通过缓存获取到需要的数据。

不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存已经过期。

通常来讲,缓存的命中率越高则表示使用缓存的收益越高,应用的性能越好(响应时间越短、吞吐量越高),抗并发的能力越强。

由此可见,在高并发的互联网系统中,缓存的命中率是至关重要的指标。

如何监控缓存的命中率

在memcached中,运行state命令可以查看memcached服务的状态信息,其中cmd_get表示总的get次数,get_hits表示get的总命中次数,命中率 = get_hits/cmd_get。

当然,我们也可以通过一些开源的第三方工具对整个memcached集?#33322;?#34892;监控,显示会更直观。比?#31995;?#22411;的包括:zabbix、MemAdmin?#21462;?/p>

如图:MemAdmin对memcached服务的命中率情况的监控统计

同理,在redis中可以运行info命令查看redis服务的状态信息,其中keyspace_hits为总的命中中次数,keyspace_misses为总的miss次数,命中率=keyspace_hits/(keyspace_hits+keyspace_misses)。

开源工具Redis-star能以图表方式直观redis服务相关信息,同时,zabbix也提供了相关的插件对redis服务进行监控。

影响缓存命中率的几个因素

之前的章节中我们提到了缓存命中率的重要性,下面分析下影响缓存命中率的几个因素。

业务和业务需求

缓存适合“读多写少”的业务,反之,使用缓存的意义其实并不大,命中率会很低。

业务需求决定了对时效性的要求,直接影响到缓存的过期时间和更新策略。时效性要求越低,就越适合缓存。在相同key和相同请求数的情况下,缓存时间越长,命中率会越高。

互联网应用的大多数业务下都是很适合使用缓存的。

缓存的设计(粒?#32676;?#31574;略)

通常情况下,缓存的粒度越小,命中率会越高。举个?#23548;?#30340;例子说明:

当缓存单个对象的时候(例如:单个用户信息),只有?#22791;?#23545;象对应的数据发生变化时,我们才需要更新缓存或者让移除缓存。而当缓存一个集合的时候(例如:所有用户数据),其中任何一个对象对应的数据发生变化时,都需要更新或移除缓存。

还有另一种情况,假设其他地方也需要获取该对象对应的数据时(比如其他地方也需要获取单个用户信息),如果缓存的是单个对象,则可以直接命中缓存,反之,则无法直接命中。这样更加灵活,缓存命中率会更高。

此外,缓存的更新/过期策略也直接影响到缓存的命中率。当数据发生变化时,直接更新缓存的值会比移除缓存(或者让缓存过期)的命中率更高,当然,系统复杂度?#19981;?#26356;高。

缓存容量和基础设施

缓存的容量有限,则容易引起缓存失效和被淘汰(目前多数的缓存框架或中间件都采用了LRU算法)。同时,缓存的技术选型也是至关重要的,比如采用应用内置的本地缓存就比较容易出现单机瓶颈,而采用分布式缓存则毕竟容易扩展。所以需要做好系统容量规划,并考虑是否可扩展。此外,不同的缓存框架或中间件,其效率和稳定性也是存在差异的。

其他因素

当缓存节点发生?#25910;?#26102;,需要避免缓存失效并最大程度影响,这种特殊情况也是架?#25925;?#38656;要考虑的。?#30340;?#27604;?#31995;?#22411;的做法就是通过一致性Hash算法,或者通过节点冗余的方式。

有些朋友可能会有这样的理解误区:既然业务需求对数据时效性要求很高,而缓存时间又会影响到缓存命中率,那么系统就别使用缓存了。其实这忽略了一个重要因素--并发。通常来讲,在相同缓存时间和key的情况下,并发越高,缓存的收益会越高,即便缓存时间很短。

提高缓存命中率的方法

从架?#25925;?#30340;角度,需要应用尽可能的通过缓存直接获取数据,并避免缓存失效。这也是比较考验架?#25925;?#33021;力的,需要在业务需求,缓存粒度,缓存策略,技术选型等各个方面去通盘考虑并做权衡。尽可能的聚焦在高频访?#26159;?#26102;效性要求不高的热点业务上,通过缓存预加载(预热)、增加存储容量、调整缓存粒?#21462;?#26356;新缓存等手段来提高命中率。

对于时效性很高(或缓存空间有限),内容跨?#32676;?#22823;(或访问很随机),并且访问量不高的应用来说缓存命中率可能长期很低,可能预?#32676;?#30340;缓存还没来得被访?#31034;?#24050;经过期了。

最新资讯
传WeWork有意聘用T-Mobile CEO出任新任CEO

传WeWork有意聘用T-Mo

消息人士透露,共享办公空间创业公司WeWork正在与T-Mobi
“双十一”空调市场混战 ?#23548;?#25918;量后或带来消费透支

“双十一”空调市场混

与国庆?#24179;?#21608;遭遇“寒流”不同,空调市场在双十一终于“
“双十一”攻守道:多场景应用 下沉市场发力

“双十一”攻守道:多场

双十一不能绝?#28304;?#34920;中国消费,它更多的是利用了?#20309;?#30340;心
“双十一”金融机构众生相:争夺消费信贷庞大蛋糕

“双十一”金融机构众

相比信用卡机构侧重?#20013;?#25552;升支付安全性与便捷性,众多助
郭明錤:2019年Apple Watch出货量是2100-2300万部

郭明錤:2019年Apple Wa

2020年在?#36824;?#20844;司主要的硬件产品中,Apple Watch出货量
电商巨头鏖战“双十一?#20445;?#19979;沉市场成为新战场

电商巨头鏖战“双十一

双十一不能绝?#28304;?#34920;中国消费,它更多的是利用了?#20309;?#30340;心
最新文章
Linux下redis的安装与使用图文教程

Linux下redis的安装与

这篇文章主要介绍了Linux下redis的安装与使用,结合图
Redis利用Pipeline加速查询速度的方法

Redis利用Pipeline加

这篇文章主要给大家介绍了关于Redis利用Pipeline加速
谈谈Redis分布式锁的正确实现方法

谈谈Redis分布式锁的

这篇文章主要给大家介绍了关于Redis分布式锁的正确实
window手动操作清理redis缓存的技巧总结

window手动操作清理re

在本篇文章中小编给大家分享了关于window环境手动操作
redis与mongodb的区别总结

redis与mongodb的区别

在本篇文章里小编给大家分享的是关于redis与mongodb的
使用Redis实现延时任务的解决方案

使用Redis实现延时任

这篇文章主要介绍了使用Redis实现延时任务的解决方案,
幸运蛋蛋pc开奖 疯狂德州扑克真钱版 全天时时彩最准计划 摆地抬卖童装真的很赚钱吗 彩都会是什么 广西快乐10分网 ag所有平台开牌都是一样的吗 九线拉霸单机 在哪直播游戏最赚钱 内蒙古时时走势带线图 魔域牛牛客户端官网