У меня есть веб-служба Java, которая использует Redis для кэширования. Сначала я создал CacheService, который напрямую обращался к клиенту Redisson для обработки кэширования. Недавно я провел рефакторинг обработки кэша, чтобы использовать абстракцию Spring Cache, что сделало код намного чище и способствовало модульному дизайну. К сожалению, Spring использует Джексона для сериализации/десериализации кэшированных объектов, в результате чего кэшированные значения становятся намного больше, чем раньше, из-за информации о типе, хранящейся в JSON. Это вызвало неприемлемое увеличение времени отклика при чтении из кэша. Есть ли способ настроить способ, которым Spring сериализует и десериализует кешированный контент? Я хотел бы заменить его своей собственной логикой, но ничего не вижу в документах. Я бы предпочел, если это возможно, не использовать свою собственную реализацию кэша AspectJ.
Можно ли настроить сериализацию, используемую абстракцией Spring Cache?
Ответы (2)
RedisCacheManager
принимает RedisOperations
, и вы можете настроить там, как работает сериализация. Вы можете настроить сериализацию для ключей и значений, хотя я подозреваю, что ключ должен использовать StringRedisSerializer
.
person
Stephane Nicoll
schedule
22.06.2016
Redisson также предоставляет Интеграция Spring Cache. Он поддерживает множество популярных кодеков: Jackson JSON, Avro, Smile, CBOR, MsgPack, Kryo, FST, LZ4, Snappy и JDK Serialization.
Вот пример:
@Bean
CacheManager cacheManager(RedissonClient redissonClient) {
Codec codec = new JsonJacksonCodec();
Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));
return new RedissonSpringCacheManager(redissonClient, config, codec);
}
person
Nikita Koksharov
schedule
04.08.2016