缓存使用的思考1

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:
 
常见缓存产品
 
     有windows版本,也有linux版本。
     安装couchbase cluster对CPU有要求,因为有几次安装提示我CPU不支持之类的信息。
 
     AppFabric是微软为windows server提供的一系列集成技术,方便构建、扩展和管理运行在IIS      上的应用。缓存是AppFabric提供的功能之一,而且支持分布式缓存。
  • memcached

     老牌的分布式缓存。

  • redis
      http://redis.io/
     
     流行的键值型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。
提供缓存过期功能,绝对时间过期,相对时间过期。
提供缓存依赖功能,依赖文件,依赖数据库。甚至提供依赖接口,用户可以实现自己需要的依赖。
更好一点的,还支持分布式缓存。
 
既然是一个基础组件,肯定会被其他的组件调用,为其他组件来缓存数据。
我们的应用经常会分层,比如说业务层,持久层。
 
假设我们现在需要业务层提供业务对象的缓存功能。
业务层需要引入缓存组件,调用缓存组件的接口实现业务对象的缓存,获取,过期。
 
业务层引入缓存组件实现业务对象的缓存,对外部应该是个黑盒,不需要外部关心使用那种缓存组件,使用的具体细节,哪些场景使用,外部存取业务对象的接口也不应该发生变化,不需要任何缓存相关参数。但是应该允许外部调用者关闭缓存,就是说外部调用者应该可以在初始化业务对象的时候声明不使用业务对象的缓存机制,或者在使用的过程中设置关闭和开启业务对象的缓存机制。
 
假设我是业务层的调用者,我希望在初始化业务层对象的时候,可以设置是否启用业务对象的缓存机制。同时在使用已经初始化的业务层对象的时候,也可以在需要的时候进行缓存机制的开启和关闭。
 
未完,待续。。。



本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/1096939,如需转载请自行联系原作者
目录
相关文章
|
传感器 C# Android开发
深度解析Uno Platform中的事件处理机制与交互设计艺术:从理论到实践的全方位指南,助您构建响应迅速、交互流畅的跨平台应用
Uno Platform 是一款开源框架,支持使用 C# 和 XAML 开发跨平台原生 UI 应用,兼容 Windows、iOS、Android 及 WebAssembly。本文将介绍 Uno Platform 中高效的事件处理方法,并通过示例代码展示交互设计的核心原则与实践技巧,帮助提升应用的用户体验。事件处理让应用能响应用户输入,如点击、触摸及传感器数据变化。通过 XAML 或 C# 添加事件处理器,可确保及时反馈用户操作。示例代码展示了一个按钮点击事件处理过程。此外,还可运用动画和过渡效果进一步增强应用交互性。
276 57
Vue3选择器(Select)
该文章介绍了一个基于 Vue2 的选择器组件 `Select`,具备丰富的自定义属性,如选项数据、占位符文本、是否禁用、是否支持清除和搜索等。支持自定义过滤函数,并可调整下拉面板的高度、宽度及显示项数。组件内部集成了 `Empty` 和 `Scrollbar` 组件以增强功能性和用户体验。示例代码展示了如何创建和使用该选择器,包括基本使用、禁用选项、支持清除与搜索等功能。
308 1
Vue3选择器(Select)
|
KVM 虚拟化
KVM的热添加技术之CPU
这篇文章介绍了如何在KVM虚拟机中热添加CPU资源,包括查看当前CPU配置、修改CPU核心数、永久性修改CPU配置以及注意事项等操作步骤。
337 1
KVM的热添加技术之CPU
|
Java
Java中将保留四位小数的Double转换为String的方法详解
选择合适的方法,可以使代码更加简洁、高效,同时也能满足不同场景下的需求。
436 5
|
存储 安全 Java
阿里云云效产品使用合集之怎么设置使用npm私有仓库进行流水线拉取依赖
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
NoSQL Redis
蓝易云 - redis报错WRONGTYPE Operation against a key holding the wrong kind of value
解决这个问题的方法是检查你的代码,确保你对每个键使用的命令与该键的类型匹配。你可以使用 `TYPE`命令来确定一个键的类型。例如,`TYPE mykey`将返回 `mykey`的类型。
459 3
|
存储 监控 Linux
linux系统应用中select函数与poll函数详解
linux系统应用中select函数与poll函数详解
167 0
|
存储 Rust 安全
《面向应用安全防护领域设计Wasm插件》赛题解析
2023云原生编程挑战赛2:面向应用安全防护领域设计 Wasm 插件 本赛题希望基于 WASM 实现 Higress 网关安全防护插件,开发者可以选择 Go/Rust/C++ 等多种语言,并从 IP 防护,WAF 规则防护,CC 防护等不同角度出发设计实现插件。
|
Java Spring
Spring中@NotEmpty、@NotBlank、@NotNull 区别和使用
Spring中@NotEmpty、@NotBlank、@NotNull 区别和使用
441 0
|
存储 SQL NoSQL
GreenPlum数据分布机制
GreenPlum数据分布机制
281 0