-1

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

在一项服务中,我看到我得到的结果类型与我预期的不同,导致 ClassCastException。准确地说:我有一个缓存键,因此我期望一个列表,但我得到的是 Type2 的结果。

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

Cache1:
cacheKey -> List<Type1>

Cache2:
cacheKey -> Type2

由于它们位于不同的缓存中,因此当我们使用简单的基于 hashmap 的缓存时,这很有效。但是,对于 ElastiCache/Memcached,我们似乎并没有真正的不同缓存(从我对 memcached 的了解来看,这很有意义——这并不多)。

我本来希望 spymemcached 通过操作缓存键来解决这个问题,这样应用程序就不需要知道实际的缓存实现(这可以通过操作缓存键并在它们前面加上缓存名称 ie 来完成)。

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

我专门研究了这个类:

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 进行配置以使其以预期的方式运行?

此外,任何其他想法都可以接受!谢谢!

4

1 回答 1

1

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

于 2014-03-24T13:50:53.240 回答