关于缓存的话题
来源:互联网 发布:广州多益网络上市 编辑:程序博客网 时间:2024/04/30 15:54
当前状况
有一个项目,大家都直接使用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@sina.com 共同讨论。
- 关于缓存的话题
- 关于IDE的话题
- 关于美丽的话题
- 关于创新的话题
- 关于激进帐户的话题
- 关于婴儿机票的话题
- 关于汉语汉字的话题
- 关于自学的一些话题
- 关于div居中的话题
- 关于Core Dump的话题
- 关于代码对齐的话题
- 问题?关于家乡的话题!
- 关于c++的一些话题
- 关于素数的古老话题
- 关于无组上传的老话题
- 关于无组上传的老话题
- WTL(3) - 关于WTL的一些话题
- 论坛话题:关于学习目的的讨论
- gdb调试命令
- 大众点评数据平台架构变迁
- 关于移动Web性能的五大神话
- 除留余数法实现简单hash函数
- 【Treap】这是Treap?
- 关于缓存的话题
- C语言各种数据类型及其在系统中占的字节和取值范围
- 多线程编程您不知道的5件事
- udev (简体中文)
- JSP中FORM的POST方式提交参数中文乱码
- java面试经典算法
- gdb调试手册
- html 与jsp 中引入javascript的相对路径
- 日期阴历转阳历