讲解有关于缓存的话题.pdfVIP

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
讲解有关于缓存的话题.pdf

关于缓存的话题 29/10/2013 by yagas 当前状况 有一个项目,大家都直接使用 Yii::app()-memcache-get 方法从缓存中获取数据。咋一 看,好像没有什么不妥。但是随着项目的扩大,流程越来越复杂 ,缓存内容的增多,这个方 法所带来的隐患就越发明显了。每一次的改版或数据变动 ,都需要查找一大片的代码进行修 改(有可能还会有隐式的组装调用)。哪怕漏掉了一个地方没有更正过来都会造成系统的BUG , 甚至是找不到根源的未知错误。 面对以上问题,我说说我的改进方案。以下的改进方法仅代表我的个人看法,如果有更 好的方法,欢迎大家一起讨论。 优化改进 计算机界有句老话,大意是:只要再多添一层间接,计算机科学中就没有解决不了的问 题(引用自《Object-C 基础教程》第 19 页)。我的处理方法就是增加一层,避免下层及协作 开发人员直接接触到数据。为避免缓存过多容易造成混乱,我们需要对缓存进行归类封装。 以网店的缓存为例: class EShopCache{ private $_cacheKey = array(‘userName’,’shopTitle’,’isValPro’,’isValShop’); private $_cache = array(); public function __get($key) { if ( array_in($key, $this-_cacheKey) ){ if ( !array_key_exixts($key, $this-_cache) ) { $this-_cache[$key] = Yii::app()-memcache-get($key); } return $this-_cache[$key]; } return false; } } 这样改进之后,不但使用方法更简单,而且更具语义化。 $eshopCache = new EShopCache; echo $ eshopCache -username; if ( $ eshopCache -isValShop == 1 ) { echo ‘网店已经进行实体认证’; } 如果需求有变更需要对数据费进行修改,我们只需要对这个类进行修改,不需要对下一 层的每一个接口进行修改 ,也不用担心忘了修改下层的封装及隐蔽调用。 持续改进 还有一个问题,如果需求再变化。网店要显示的是用户自定义的昵称(nickName) ,而不 再是用户名(userName) ,难道我们只能翻遍文件修改了吗?改进方案如下: class EShopCache{ private $_cacheKey = array(‘userName’,’shopTitle’,’isValPro’,’isValShop’); private $_aliaeses = array(‘userName’=’nickName’); private $_cache = array(); public function __get($key) { if ( array_in($key, $this-_cacheKey) ){ if ( !array_key_exixts($key, $this-_cache) ) { $_key = array_key_exists($key, $this-_aliases)? $this-_aliases[$key] : $key; $this-_cache[$key] = Yii::app()-memcache-get($_key); } return $this-_cache[$key]; } return false; } } 到此,这个类的功能已经可以满足我们使用。我提供的方案就是使用设计模式中的“代 理模式”来间接地访问缓存数据。如果有什么异议,欢迎大家发邮件到 yagas@ 共 同讨论。

文档评论(0)

zhangchao11 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档