我想将Redis用作同一物理机器上多个应用程序的缓存存储。
我至少知道两种方法:
但我不知道哪一个对我更好。
这些方法的优点和缺点是什么?
有没有更好的方法呢?
答案 0 :(得分:14)
通常,您应该更喜欢第一种方法,即专用的Redis服务器。共享数据库由同一Redis进程管理,因此可以相互阻塞。此外,共享数据库共享相同的配置(尽管在您的情况下,这可能不是问题,因为所有数据库都用于缓存)。最后,Redis Cluster不支持共享数据库。
有关更多信息,请参阅此博文:https://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances
答案 1 :(得分:0)
您可以为每个应用程序使用不同的缓存管理器,它们的工作方式也与我使用的相同。 就像:
@Bean(name = "myCacheManager")
public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
return cacheManager;
}
@Bean(name ="customKeyGenerator")
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... objects) {
// This will generate a unique key of the class name, the method name,
// and all method parameters appended.
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName());
sb.append(method.getName());
for (Object obj : objects) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}