惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
Jina AI
Jina AI
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
L
LangChain Blog
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
美团技术团队
博客园 - 三生石上(FineUI控件)
N
Netflix TechBlog - Medium
D
DataBreaches.Net
P
Proofpoint News Feed
小众软件
小众软件
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
雷峰网
雷峰网
G
Google Developers Blog

博客园 - Virus-BeautyCode

【新年第一篇】平台的账号管理系统设计的设想 从短信类到短信平台之设计篇 需求分析 在系统集成中面临多个产品的时候如何选择? 动态表单数据库设计 图片存储那些事 动态可配置表单的设计构思 [翻译].NET框架中的缓存 【翻译】SQL Server索引进阶:第一级,索引简介 网站架构资料收集整理 培养我们的目标感 使用Django来处理对于静态文件的请求 项目-团队-技术-个人(提拔篇) 项目-团队-技术-个人(专业篇) 项目-团队-技术-个人 (团队建设篇) MongoDB在Windows2003上得安装配置及使用 【翻译】MVC vs. MVP vs. MVVM 消息提示的架构演进-理论篇 MSSQL2005技术内幕-学习笔记
缓存使用的思考1
Virus-BeautyCode · 2012-12-22 · via 博客园 - 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。

提供缓存过期功能,绝对时间过期,相对时间过期。

提供缓存依赖功能,依赖文件,依赖数据库。甚至提供依赖接口,用户可以实现自己需要的依赖。

更好一点的,还支持分布式缓存。

既然是一个基础组件,肯定会被其他的组件调用,为其他组件来缓存数据。

我们的应用经常会分层,比如说业务层,持久层。

假设我们现在需要业务层提供业务对象的缓存功能。

业务层需要引入缓存组件,调用缓存组件的接口实现业务对象的缓存,获取,过期。

业务层引入缓存组件实现业务对象的缓存,对外部应该是个黑盒,不需要外部关心使用那种缓存组件,使用的具体细节,哪些场景使用,外部存取业务对象的接口也不应该发生变化,不需要任何缓存相关参数。但是应该允许外部调用者关闭缓存,就是说外部调用者应该可以在初始化业务对象的时候声明不使用业务对象的缓存机制,或者在使用的过程中设置关闭和开启业务对象的缓存机制。

假设我是业务层的调用者,我希望在初始化业务层对象的时候,可以设置是否启用业务对象的缓存机制。同时在使用已经初始化的业务层对象的时候,也可以在需要的时候进行缓存机制的开启和关闭。

未完,待续。。。