将Redis用作同一服务器上多个应用程序的缓存存储

时间:2014-11-30 19:53:10

标签: redis redis-server

我想将Redis用作同一物理机器上多个应用程序的缓存存储。

我至少知道两种方法:

  1. 在不同的端口上运行多个Redis实例;
  2. 为不同的应用程序使用不同的Redis数据库。
  3. 但我不知道哪一个对我更好。

    这些方法的优点和缺点是什么?

    有没有更好的方法呢?

2 个答案:

答案 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();
            }
        };
    }