Memcache主要的作用是为减轻大访问量对数据库的冲击,所以一般的逻辑是首先从memcache中读取数据,如果没有就从数据库中读取数据写入到memcache中,等下一次读取的时候就可以从memcache中读取了。但在项目中的具体应用策略(也就是哪些数据应该缓存?怎么样缓存?过期策略?)就是个问题了。它的一个总原则是将经常需要从数据库读取的数据缓存在memcache中。这些数据也分为几类:
一、经常被读取并且实时性要求不强可以等到自动过期的数据。例如网站首页最新文章列表、某某排行等数据。也就是虽然新数据产生了,但对用户体验不会产生任何影响的场景。
这类数据就使用典型的缓存策略,设置一过合理的过期时间,当数据过期以后再从数据库中读取。当然你得制定一个缓存清除策略,便于编辑或者其它人员能马上看到效果。
二、经常被读取并且实时性要求强的数据。比如用户的好友列表,用户文章列表,用户阅读记录等。
这类数据首先被载入到memcache中,当发生更改(添加、修改、删除)时就清除缓存。在缓存的时候,我将查询的SQL语句md5()得到它的hash值作为key,结果数组作为值写入memcache,并且将该SQL涉及的table_name以及hash值配对存入memcache中。当更改了这个表时,我就将与此表相配对的key的缓存全部删除。
三、统计类缓存,比如文章浏览数、网站PV等
此类缓存是将在数据库累加的数据放在memcache来累加。获取也通过memcache来获取。但这样就产生了一个问题,如果memcache服务器down掉的话这些数据就有可能丢失,所以一般使用memcache永久性存储,这方面新浪使用memcachedb。
四、活跃用户的基本信息或者某篇热门文章。
此类数据的一个特点就是数据都是一行,也就是一个一维数组,当数据被update时(比如修改昵称、文章的评论数),在更改数据库数据的同时,使用Memcache::replace替换掉缓存里的数据。这样就有效了避免了再次查询数据库。
五、session数据
使用memcache来存储session的效率是最高的。memcache本身也是非常稳定的,不太用担心它会突然down掉引起session数据的丢失,即使丢失就重新登录了,也没啥。

注:Memcache作为缓存服务器,其PHP插件分为memcache和memcached两种,区别不大,应用一种即可。

最新文章

  1. js异步加载的3种方式(转载)
  2. IOS跳转到设置特定项
  3. Lua 栈的理解
  4. Asp.net默认配置下,Session莫名丢失的原因及解决
  5. 更改gps.conf来加快GPS搜星速度
  6. 使用Keil建立工程和烧录到89C52板上
  7. C#中DataGridView控件使用大全
  8. Oracle不能导入空表解决方案
  9. HTML5实际和离线应用分析
  10. jquery.validate 验证(支持前台js验证通过,然后ajax后台数据校验)二
  11. SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息
  12. jq 滚轮监听事件
  13. mysql 开源 ~ canal+otter系列(1)
  14. seller vue 编写接口请求【mock数据】
  15. hive-client heap内存大小的配置优先级
  16. 新建django需要设置的地方
  17. HTTPS加密传输数据,加强P2P平台网络安全和信任
  18. Linux 系统的/var目录
  19. (a*b)%c 小的技巧
  20. 下拉刷新和UITableView的section headerView冲突的原因分析与解决方案

热门文章

  1. 为什么32位系统最大支持4G内存??我自己悟出来了 终于 。。。。。
  2. CF985B Switches and Lamps【矩阵操作/枚举】
  3. Python与数据结构[0] -> 链表/LinkedList[2] -> 链表有环与链表相交判断的 Python 实现
  4. Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性
  5. FZU -2212 Super Mobile Charger(水题)
  6. 八. 输入输出(IO)操作3.面向字符的输出流
  7. Spring项目搭建
  8. Ubifs Support
  9. .net的远程调用
  10. 如何设计好的RESTful API 之好的RESTful API 特征