



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PHP支持组操作的Memcache类(域操作)Memcache是PHP开发中较常用到的缓存方法,在高并发的系统中是必不可少的组成部分。在实际开发中,Memcache存在一个比较不尽人意的问题,就是Memcache不能支持对key进行的组操作。组操作,也可以称为域操作,比如说某个文章系统,在前台部分使用Memcache缓存了列表页数据、文章详细页数据,两种数据的量都比较多。那么,当后台发布了一篇文章的时候,列表页就应该需要更新到最新的列表可能涉及到许多个列表页。当然,对文章详细页来说,它是不需要更新的。好的,这个时候我们就需要删除原有缓存,让程序可以自动更新列表页数据。但是使用Memcache的flush函数有个问题,就是它会清空全部的数据,包括列表页和文章页的数据,在大并发的条件下,全部缓存删除后重建缓存的时候,将会有非常高的负载产生。另外,还会有情况就是有些你不愿意删除的缓存变量,也会丢失了,比如说程序的配置,数据库为了提速而存到缓存的表结构等。所以我们需要一个支持组操作的缓存机制,我们就可以把列表页设置成一个组,文章页数据是另外一个组,程序配置又是另外一个组等等。当需要重建列表页的时候,只需要删除列表页这个组里面全部的数据,而不会影响到别的组的数据。测试了几种方案,还是以下的方案最为理想和高速,我们先看代码,再说原理:1. mmc=false;10. return;11. 12. $this-mmc=newmemcache();13. $this-mmc-addServer(192.168.1.5,11211);14. $this-mmc-addServer(192.168.1.6,11211);15. $this-group=$group;16. $this-version=$this-mmc-get(version_.$group);17. 18. functionset($key,$var,$expire=3600)19. if(!$this-mmc)return;20. return$this-mmc-set($this-group._.$this-version._.$key,$var,$expire);21. 22. functionget($key)23. if(!$this-mmc)return;24. return$this-mmc-get($this-group._.$this-version._.$key);25. 26. functionincr($key,$value=1)27. if(!$this-mmc)return;28. return$this-mmc-increment($this-group._.$this-version._.$key,$value);29. 30. functiondecr($key,$value=1)31. if(!$this-mmc)return;32. return$this-mmc-decrement($this-group._.$this-version._.$key,$value);33. 34. functiondelete($key)35. if(!$this-mmc)return;36. return$this-mmc-delete($this-group._.$this-version._.$key);37. 38. functionflush()39. if(!$this-mmc)return;40. +$this-version;41. $this-mmc-set(version_.$this-group,$this-version);42. 43. 44. ?上面的类比较完整,包括链接Memcache服务,设置和获取值,增减值,还有删除key和全删除(flush)。这里包括了常规的Memcache操作功能,和对全删除(flush)操作的扩展。从代码可以看到,支持组的flush功能的实现,是通过version这个key来实现的,也就是每次存该组的变量的时候,变量的key都会加入version值,version值是一个数字(从1开始),当存和取key的时候,version值都会被使用到。当开发者要flush当前组的数据的时候,flush操作只是简单地改变一些version的值(加一),那么,下次存取key的时候,将获取不到原来的值因为version改变了,也就是取的key名称已经改变了。这样原有的值会被Memcache自动回收,不会出现任何的效率开销。而且程序上只是增加一个version的存和取,数据量极小,对系统效率基本没有任何影响。通过以上的类,可以针对Memcache缓存进行组的操作,而这个PHP类,还可以继续扩展,如加入socket直接访问memcache的接口功能,这样PHP环境中就不需要安装memcache扩展类了,这样更有效避免flush的误操作了,而且在加入apc等缓存机制后,socket访问memcache接口也不会比扩展慢多少。另外,MyCache类还有个附加的功能:当memcache服务失效的时候,MyCache类只是简单返回空值,而不会直接出错。以下附带MyCache类的使用方法:1. /引入定义2. include(MyCache.php);3. 4. /实例化5. $mc=newMyCache(abc);/要有域6. 7. /设置值8. $mc-set(word,helloworld,900);9. 10. /取得值11. echo$mc-get(word);12. 13. /删除值14. $mc-delete(word);15. echo$mc-get(word);16. 17. $mc-set(counter,1,290000);18. echo$mc-get(counter);19. 20. /增加值21. $mc-incr(counter);22. $mc-incr(counter);23. echo$mc-get(counter);24. 25. /减少值26. $mc-decr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学历类自考学前儿童数学教育-社会学概论参考题库含答案解析(5套试卷)
- 2025年学历类自考学前儿童发展-外国文学作品选参考题库含答案解析(5套试卷)
- 2025年学历类自考学前儿童保育学-中国现代文学作品选参考题库含答案解析(5套试卷)
- 2025年学历类自考外科护理学(一)-行政法与行政诉讼法(一)参考题库含答案解析(5套试卷)
- 2025年学历类自考外科护理学(一)-公务员制度参考题库含答案解析(5套试卷)
- 2025年学历类自考儿科护理学(一)-马克思主义基本原理参考题库含答案解析(5套试卷)
- 单位项目合作合同范本
- 房屋租赁改造合同范本
- 设计加施工合同范本
- 水泥房屋转让合同范本
- 2025江苏苏州昆山国创投资集团有限公司第二期招聘10人笔试参考题库附带答案详解
- 2025-2026学年浙教版(2024)初中科学七年级上册教学计划及进度表
- 计算机操作员中级考试题库及答案解析
- 2025至2030年中国应急产业市场供需现状及投资战略研究报告
- 2025-2026学年译林版(三起)(2024)小学英语三年级上册教学计划及进度表
- 中医院临床路径培训课件
- 2025年甘肃普通高中学业水平选择性考试化学真题及答案
- 2024年合肥演艺集团有限公司社会招聘4人笔试备考试题带答案详解
- 厨房用火安全知识培训课件
- 2025年N1叉车司机模拟考试1000题及答案
- 【艾青诗选】批注
评论
0/150
提交评论