Spring Cache:使用memcached作为分布式缓存

时间:2014-03-24 11:31:17

标签: java memcached amazon-elasticache spring-cache

对于许多java服务,我们使用AWS ElastiCache作为Spring Cache抽象和spymemcached集成的分布式缓存。

在一个服务中,我看到的行为是我得到的结果与我预期的不同,导致ClassCastException。确切地说:我有一个缓存键,因此我期望一个List,但我得到的是Type2的结果。

我们已经定义了许多缓存,其中一些使用相同的缓存密钥:

Cache1:
cacheKey -> List<Type1>

Cache2:
cacheKey -> Type2

由于它们位于不同的缓存中,因此当我们使用基于哈希的简单缓存时,这是有效的。有了ElastiCache / Memcached,但似乎我们并没有真正有不同的缓存(从我所知的memcached中可以理解 - 这并不多)。

我原本期望spymemcached通过操作缓存键来处理这个问题,因此应用程序不需要知道实际的缓存实现(这可以通过操作缓存键并为它们添加缓存名称来实现)。 / p>

从几个调试会话和我看到的错误,情况似乎并非如此。

我特意看了这堂课:

com.google.code.ssm.spring.SSMCache

L82:  value = cache.get(getKey(key), null);
L154: private String getKey(final Object key) {
L155:    return key.toString();
L156: }

我原本希望getKey()方法以缓存名称为前缀。

所以我的问题是:

  1. 我是否理解这里发生了什么?
  2. 是否可以使用spymemcached配置某些内容以使其按预期方式运行?
  3. 此外,还有任何其他想法!谢谢!

1 个答案:

答案 0 :(得分:1)

好的,我发现这是simple-spring-memcached版本3.2.0的问题。版本3.3.0修复了它。