如何提高缓存命中率

   2016-10-31 0
核心提示:1. 产品场景分析,多用户访问统一同一数据,命中率就高,个性化信息命中就低,在就做好分布式,高可扩展,例如一致性哈西 - 秋夕2. 应该是获得缓存数据的次数/访问缓存的次数 - 吴 仕佳3. 缓存命中率只有memcache,lru机制才会有这样命中率的问题 - 林志勇4.

1. 产品场景分析,多用户访问统一同一数据,命中率就高,个性化信息命中就低,在就做好分布式,高可扩展,例如一致性哈西 - 秋夕

2. 应该是获得缓存数据的次数/访问缓存的次数 - 吴 仕佳

3. 缓存命中率只有memcache,lru机制才会有这样命中率的问题 - 林志勇

4. 我觉得像通过正则的方式进行的web服务器类的缓存才有命中率的问题吧。 - 如末

5. 从其他方面考虑吧…… 比如一个资源刚被修改过,缓存被删除 当时请求 就不命中缓存

提高命中率就是 删除缓存后 立马写缓存 - Nemo

6. 这就不是命中了,这是失败

命中是缓存有,但是有概率性的取不到 - 如末

7. 命中率就这么算的... get到 +1次 get不到总数+1  - Nemo

8. 缓存肯定有命中率的,基本也都是热数据被缓存 - 宋明明

9. 缓存的命中率(查询数据的次数/查询的总数)*100%  大系统40-50可以了,70-80优秀了。[微笑] - 王谷峰

10. 看看 memcache LRU 机制 以及 slab chunk 的内存原来就知道

为什么有命中率的问题了

内存分配机制 - 林志勇

11. LRU老数据被T现象,某个值过去后,并没有从内存中删除,只是看不到这个数据而已.  还有根据访问来计算热度吧。 - 王谷峰

12. 一般来说,数据粒度越小,命中率越高,但是头几次使用时非常慢,需要配合预加载 - tiyee

13. [转]memcached提高命中率,memcached server LRU 深入分析 http://breezylee.iteye.com/blog/2101605 - hello2t

14. 数据的缓存生成和修改 你们是怎么控制 比如在需要的地方硬编码处理 还是单独做一个类 在入口的地方拦截通过配置来处理 - Lee. Li

回: 我们开始的时候是放在增删该查里,后来老改动,代码一团糟,缓存加到任务队列里操作的 - tiyee

回: 理想的缓存是面向切面的。任何一种资源在被获取之前 在被获取之后,均该实现缓存的读取,写入逻辑。 - Nemo

回: 要做的就是封装... 可直接让对象类实现切面方法。也可以通过专门的切面管理类做切面管理。我之前写过一个aop框架..对象都是要通过工厂生成,开发时没有代码提示,不友好……我自己都不用了.... 不过 实现的功能还挺有意思的.. 任何对象 任何方法 都可以配置切面方法。但是要求开发人员转变普通开发思路... 比如 新建文章,只写文章表,用户的文章数+1要用切面来实现。  - Nemo

回: 正常思路就是 插入文章表 update文章数。。 然后 删除的时候 在-1 换成aop就爽多了 哈哈 - Nemo

回: 这种思路,写时爽,业务不断边跟就烦死了 - tiyee

回: 业务不断变 才爽呢  - Nemo

回:  硬变成 量少无所谓多了 不好管理 -  Lee. Li

回:  也不方便水平扩展 -tiyee

回:  aop + filter 应付变化的 王道

为何不能水平扩展?

我打算做一个基于aop message filter 的界面化代码生成工具.... 有感兴趣的么

适用于我这5年多工作的绝大部分场景  - Nemo

回: 切面 分前置和后置 应该也可以在里面加加入自定义方法去处理特殊的业务变更

在前后方法里自定义 - Lee. Li

回: 用过类似东西,后来烦死了,改任务队列了 - tiyee

回: 任务队列 可以处理 有点野路子感觉 :joy: - Lee. Li

回: 因为我们还有个场景,别的组同事要双写,多写redis或ceche,不用队列不方便

回: tiyee 你的那个双写与否,跟是否用aop其实是没有任何冲突的~~

https://github.com/wclssdn/PHP-AOP-Framework

当时的php版本,在魔术方法上的性能略低啊... 所以,用于生产的话,不太合适. 也就放弃更新了...

思路是使用统一的切面管理类做切面管理. 方法调用时候,通过切面管理类去做切面配置查找执行. - Nemo

回: 切面要用的爽,就要把握好需求方向。方向把握不好越切越乱,一般都在非功能性需求上用切面,比如日志、安全方面,我们正常需要一般都不用,越用越乱 - 上吊de鱼

15. 现在业务角度讲,命中率低,很可能是你的item分得不够细,颗粒度太大,再分拆呗 - 学在囧途

16. 命中低的话,除了被动缓存,再做一个主动缓存,小于主key的过期时间,定时去更新,保证缓存一直存在 - 青衫隐_刘

回: 这种做法在key复杂和多的时候很难实现 适用于公共使用的

不然构造会很麻烦,然后数量多,更新时间长 所以还是看业务场景 - 学在囧途

回: 学总说的是,比如商品就没法做

我现在商品是被动缓存,库存和售卖时间都是异步获取 - 青衫隐_刘

17. 缓存命中率太低,有可能是滥用缓存造成的。要具体问题具体分析。 - 李三

18. 缓存命中率低,那是说写频繁读不频繁么,如果读操作太耗资源,那写库的时候同步或者队列更新缓存了 - shawnvan

回: @shawnvan 命中率不是读写频繁与否的问题。。。你先搞清楚问题的意思。

你不会是说数据库的查询缓存吧?根本不在一个频道上。 - 李三

19. 我们目前的做法是主动清除,提高缓存的正确率 - 沈括号

20. 尽量降低缓存粒度 - tofuliang

21. 我建议大家读一读facebook关于缓存的那篇论文,理解一下缓存的存储模型。比如,为什么为了一致性,缓存几乎只存在两种操作,add和delete, replace和update会带来什么问题。

关于缓存命中率上,业务上一定要符合缓存的假设:如果访问了某一个资源,那么接下来很有可能会再次访问,也就是局部性原理。如果业务本身不符合的,用缓存没有太大的意义。另外一个现实的问题是,如果你的流量有高峰期,当从低峰期突然进入高峰期时,可能会面临缓存穿透,流量直接打到数据库上,对服务造成影响。这个可以根据情况作适当的预热,防止此类情况 - 廖强

22. 缓存无底洞问题解析 http://carlosfu.iteye.com/blog/2263813 - kdrol.li

回: @kdrol.li 你分享的这个文章里面讲得不对,现在基本都是异步io,不会说一个一个的同步拿数据。 - 廖强

23. 缓存某一时的失效,流量高的话,是不是也会好多走到数据库,这个你们怎么预防的  - 尹少爷

回: 定时去执行脚本,更新缓存 - M4tou

回: 高峰期可预测的话,就延长过期时间

现在一般遇到都是热点key问题比较多 - 一席

回: 让一个进程穿透更新  - sky

回: 这种的话,系统容量要有一定的富足,系统或者数据库这边有过载保护 - 廖强

回: 可以用加锁的机制避免缓存过期引起的惊群现象 - 海中金

回: 嗯,lock也是一种不错的方法 - 廖强

回: 高并发下还加锁,看你是什么数据了 - 一席

24. Memcache mutex设计模式 http://timyang.net/programming/memcache-mutex/ - 廖强

25. 同学们,用缓存,且仔细分析过自己缓存内容都是什么,都有多大size的,举个手?

不清楚自己每次缓存内容的具体size,不做详细分析,谈提高,是扯蛋

反问1:缓存需要更新吗?

反问2:缓存的空间(内存最好)是无限的吗?

如果是个死尸,你每次开馆,它都是那个球样。

能理解吗?

再既定环境下,你每次打开箱子,薛定谔的猫都还是那个球样。命中率是¹º‰,除非你把他憋死,或者饿死,或者毒死,或者。。。

是你需要的那份缓存数据是否还存在。

因为这个时候可能有几万只几十万几百万甚至几千万上亿兆京秭亥只猫或者干尸,可是你可能最多只有一百万个箱子。

26.  ,应该就是看业务特点

例如大部分游戏开发一段时间后活跃用户就那些,命中就大

刚开服那天全是新用户,命中就低 - 九命猫

【分享链接】

1. 以前同事的分享中提到过:实际生产环境中可能出现的问题:PHP Warning:  Unknown: Failed to write session data (memcached). Please verify that the current setting of session.save_path is correct (xx.xxx.xx.xxxx:xxxxx,xx.xxx.xx.xxxx:xxxx) in Unknown on line 0推荐的解决方法         @all。今天对线上的命中率偏低,进行了分析,发现大量的add/delete memc.sess.key.lock.$PHPSESSID.  看了看php_memcached.so的源码。原来是session_start()时,session访问mc都会加执行先执行add,等session访问mc结束时。又会delete。建意把session.auto_start关闭。参看文章: http://breezylee.iteye.com/blog/2101605. http://blog.libnav.com/php/307.html - HQ数字卡

2. 微信朋友圈技术之道:三个人的后台团队与每日十亿的发布量 http://mp.weixin.qq.com/s?__biz=MjM5MDE0Mjc4MA==&mid=401735823&idx=1&sn=7a4df58c22d9d3145e0692dd580f6a3d - Xiangz

3. 移动化机会_陈明_微信朋友圈技术之道 http://wenku.it168.com/d_001634122.shtml

http://www.infoq.com/cn/presentations/technology-of-weixin-moments - 学在囧途

4. 作为一个程序员,进步完全取决于自己 http://mp.weixin.qq.com/s?__biz=MjM5NTg2NTU0Ng==&mid=404174728&idx=2&sn=69d9d43880b6a053c60cec9cd1e275c6 - 黑夜路人

5. 最近研究php7扩展   这个文档写得还不错   https://github.com/beberlei/whitewashing.de/blob/master/drafts/porting_extension_to_php7.rst - :bus: xH :dash:

6. #经验# php-fpm的max_chindren的一些误区 http://mp.weixin.qq.com/s?__biz=MzI0MjEwMDMzNQ==&mid=402098160&idx=1&sn=2e5680eff51c134c77b9b2e578e236ed - 乔楚

 
标签: Memcached AOP
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Memcached中Perl序列化存储的对象PHP无法读取的
    Perl Memcached的客户端序列化对象采用的是Storable模块的nfreeze方法,而这个方法又调用了c扩展的do_store方法;反序列化使用的是Storable模块的thaw方法,而这个方法又是调用的c扩展的do_retrieve方法。而在PHP中,进行的却是serialize和unserialize操作。
    02-09
  • 为php安装memcached扩展连接memcached服务器
    为php安装memcached扩展连接memcached服务器
    首先必须完成必要的软件安装,memcached是php连接memcached服务器的php扩展以前有个叫memcache也是php连接memcached服务器的扩展php的memcache和memcached扩展都是作为客户端去连接memcached服务器但memcached作为客户端比memcache性能更好功能更强大,而且me
    02-09
  • Windows平台安装Apache+PHP+Mysql+Memcached+Fi
    在Windows平台开发PHP的过程中,运行环境是必不可少的一部分,常常我们都会选择现有的环境套件,目前比较流行的环境套件有XAMPP、WAMP、APMserv、DedeAMPZ、WNMP、PHPnow等等。之前一直使用PHPnow有差不多有三四年的时间。如今在公司使用的是Wamp,Wamp使用起
    02-07
  • Memcache和Redis的区别以及PHP中操作
    Memcache和Redis区别1. Memcache和Redis都是用来管理数据的2. 他们数据都是存放在内存里的3. Redis可以定期将数据备份到磁盘(永久化)4. Memcache只是简单的key/value缓存5. Redis不仅仅支持简单的k/v类型的存储,同时还提供;list, set, hash等数据结构的存储Re
  • [ Laravel 5.3 文档 ] 综合话题 —— 缓存
    1、配置Laravel为不同的缓存系统提供了统一的 API。缓存配置位于config/cache.php。在该文件中你可以指定在应用中默认使用哪个缓存驱动。Laravel 目前支持主流的缓存后端如Memcached和Redis等。缓存配置文件还包含其他文档化的选项,确保仔细阅读这些选项。默
  • Ubuntu 16.04 为 PHP7 添加 memcached 以及 red
    切换到 PHP 7 之后,网站的速度大幅提升,不过通常的扩展可能某一个就还没有支持 PHP7.Memcached比如说我现在使用了最新的 Ubuntu 16.04,虽然内置了 PHP 7 源,但 memcached 就还没有,不过好在,它已经支持了 PHP 7 ,只是没有源而已,我们手动编译它。要安
  • 折腾:vps上php环境升级为php5.5
    php5.5出来很久了,一直没应用,vps上还是5.3,折腾一番尝试一下看5.5效果如何。查阅了官方的升级说明,从5.3到5.5变化不大,而且vps上主要跑的wordpress,drupal,phpmyadmin等应用,它们的开发理论是是比较规范的,估计问题不大。原环境,php-fpm, nginx,
    08-30 VPSMemcached
  • PHP如何使用Memcached
    memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。本文给大家介绍PHP如何使用Memcached,感兴趣的朋友一起学习吧
  • PHP 内存缓存加速功能memcached安装与用法
    memcached 简介在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东。这里简单介绍一下。
  • PHP Memcached应用实现代码
    PHP Memcached应用实现代码
    在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东。这里简单介绍一下,memcached 是高效、快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序。
    11-17 PHPMemcached
点击排行