如何抽象出2种不同的缓存实现

时间:2008-12-12 09:22:53

标签: java memcached abstraction ehcache distributed-caching

我计划在负载均衡的webapp中使用分布式缓存。 所以我将尝试抽象出apache ehcache和memcached之间的常用函数。

我的目标是能够进行简单的配置切换以选择要使用的缓存解决方案。我应该去SPI路线,例如比如如何连接XML解析器?

3 个答案:

答案 0 :(得分:1)

修复界面后,这确实是一个创建模式的问题。依赖注入是我的最爱,如果缓存选择策略是动态的,你可以使用spring bean工厂在运行时决定。 Spring支持Web应用程序的“会话”范围,这意味着如果您愿意,可以让工厂决定每个会话。

否则一个简单的服务定位器也应该这样做。

http://en.wikipedia.org/wiki/Service_locator_pattern

答案 1 :(得分:1)

Spring还有一个缓存提供程序模块,它可以完全满足您的需求。不过,我只是不确定是否支持memcached。即使没有,为它编写适配器可能比手动滚动自己的界面要少。见https://springmodules.dev.java.net/docs/reference/0.8/html_single/#cache

答案 2 :(得分:1)

从我的头顶......

  • 使用常见的缓存相关方法创建接口(add(),remove(),refresh()是最明显的方法。)
  • 创建该接口的实现,该接口使用下面的所需缓存(“MyEhCacheImplementation”和“MyMemCachedImplementation”或类似的东西)。
  • 创建一个CacheFactory,它根据简单的值(如number,String或enum)返回某种类型的缓存。不要忘记为默认实现做一个后备!
  • 创建一些方法在初始化时将单个值注入工厂,例如,如果你有一些类在启动期间读取各种设置或者你正在使用Spring applicationContext.xml或类似的东西,你需要创建一个初始化方法对于你的缓存,它接受一个参数,调用工厂并返回正确类型的缓存和/或将它设置到你使用它的地方。

我相信你需要在结构上让它可靠地工作,这样你就可以随时扩展它。

免费获取贴纸的机会↓↓↓
豫ICP备18024241号-1