Использование Redis в качестве хранилища кеша для нескольких приложений на одном сервере

Я хочу использовать Redis в качестве хранилища кеша для нескольких приложений на одном физическом компьютере.

Я знаю по крайней мере два способа сделать это:

  1. запустив несколько экземпляров Redis на разных портах;
  2. используя разные базы данных Redis для разных приложений.

Но я не знаю, какой из них лучше для меня.

Каковы преимущества и недостатки этих методов?

Есть ли лучший способ сделать это?


person Behrooz    schedule 30.11.2014    source источник


Ответы (2)


Как правило, вам следует предпочесть первый подход, то есть выделенные серверы Redis. Общие базы данных управляются одним и тем же процессом Redis и поэтому могут блокировать друг друга. Кроме того, общие базы данных имеют одинаковую конфигурацию (хотя в вашем случае это может не быть проблемой, поскольку все базы данных предназначены для кэширования). Наконец, общие базы данных не поддерживаются Redis Cluster.

Для получения дополнительной информации см. эту запись в блоге: https://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances

person Itamar Haber    schedule 30.11.2014
comment
Кроме того, дампы управляются по-разному, лучше иметь разные дампы, вы не можете изолировать rdb от db. - person zenbeni; 02.12.2014

Вы можете использовать разные менеджеры кеша для каждого приложения, они также будут работать так же, как я. как :

@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();
            }
        };
    }
person satish    schedule 30.10.2019