代码改变世界

缓存使用的思考1

2012-12-22 15:38  Virus-BeautyCode  阅读(...)  评论(...编辑  收藏
 
 
常见缓存产品
 
     有windows版本,也有linux版本。
     安装couchbase cluster对CPU有要求,因为有几次安装提示我CPU不支持之类的信息。
 
     AppFabric是微软为windows server提供的一系列集成技术,方便构建、扩展和管理运行在IIS      上的应用。缓存是AppFabric提供的功能之一,而且支持分布式缓存。
  • memcached

     老牌的分布式缓存。

  • redis
     
     流行的键值型NoSQL数据库,可以当做缓存来使用。可以存储string,hash,list,set,
     sorted set等多种类型的值。
  • mongodb
 
     流行的文档型NoSQL数据库,易扩展,结构自由,也可以当做缓存来使用。
 
 
memcached、redis、mongodb由于一些原因,在windows上运行不是太好,可能出现一些奇怪的问题。这一方面源于它们本身对windows支持不够,或者本来就不推荐在windows上使用。
 
经常会被缓存的内容:
  • 分类信息
  • 不常改变的信息
 
其实产品信息,甚至用户信息,比如说username对应的userid,userid对应的username,其实缓存的意
 
义还是蛮大的。试想一下,如果只是想要username对应的userid,这一点信息是不是就不要查询数据库了,好像有点浪费。引申开来,很多根据主键查询少量常用信息的需求都可以用缓存来实现,替换掉查询数据库。
 
说到这里,肯定有人会说:“信息过期了怎么办,用户修改了信息怎么办。”。一般的缓存都提供过期机制,相对时间过期,绝对时间过期,修改信息之后可以设置绝对过期时间为过去的一个时间,下次访问缓存的信息的时候,就会因为缓存失效而从数据源获取了。还可以在修改信息之后,更新一下缓存,保持缓存总是最新信息。
 
首先缓存应该是一个组件,一个不依赖于其他组件的基础组件。提供键值方式的存取,键位字符串类型,值为对象类型。当然,如果值能提供多种数据类型,那就更好了。比如说redis就提供string,hash,list,set,sorted set。
提供缓存过期功能,绝对时间过期,相对时间过期。
提供缓存依赖功能,依赖文件,依赖数据库。甚至提供依赖接口,用户可以实现自己需要的依赖。
更好一点的,还支持分布式缓存。
 
既然是一个基础组件,肯定会被其他的组件调用,为其他组件来缓存数据。
我们的应用经常会分层,比如说业务层,持久层。
 
假设我们现在需要业务层提供业务对象的缓存功能。
业务层需要引入缓存组件,调用缓存组件的接口实现业务对象的缓存,获取,过期。
 
业务层引入缓存组件实现业务对象的缓存,对外部应该是个黑盒,不需要外部关心使用那种缓存组件,使用的具体细节,哪些场景使用,外部存取业务对象的接口也不应该发生变化,不需要任何缓存相关参数。但是应该允许外部调用者关闭缓存,就是说外部调用者应该可以在初始化业务对象的时候声明不使用业务对象的缓存机制,或者在使用的过程中设置关闭和开启业务对象的缓存机制。
 
假设我是业务层的调用者,我希望在初始化业务层对象的时候,可以设置是否启用业务对象的缓存机制。同时在使用已经初始化的业务层对象的时候,也可以在需要的时候进行缓存机制的开启和关闭。
 
未完,待续。。。