Ich habe einen Java-Webdienst, der Redis zum Caching verwendet. Zunächst habe ich einen CacheService erstellt, der direkt auf den Redisson-Client zugreift, um mit Caching umzugehen. Ich habe kürzlich die Cache-Behandlung überarbeitet, um die Spring-Cache-Abstraktion zu verwenden, wodurch der Code viel sauberer wurde und das modulare Design gefördert wurde. Leider verwendet Spring Jackson, um die zwischengespeicherten Objekte zu serialisieren/deserialisieren, was dazu führt, dass die zwischengespeicherten Werte aufgrund von Typinformationen, die im JSON gespeichert werden, viel größer sind als zuvor. Dies verursachte eine unannehmbare Zunahme der Antwortzeit bei Lesevorgängen aus dem Cache. Gibt es eine Möglichkeit, die Art und Weise anzupassen, in der Spring den zwischengespeicherten Inhalt serialisiert und deserialisiert? Ich möchte es durch meine eigene Logik ersetzen, sehe aber nichts in den Dokumenten. Ich würde lieber nicht meine eigene AspectJ Cache-Implementierung rollen müssen, wenn möglich.Kann die von der Spring Cache-Abstraktion verwendete Serialisierung angepasst werden?
0
A
Antwort
1
Die RedisCacheManager
nimmt eine RedisOperations
und Sie können dort konfigurieren, wie Serialisierung funktioniert. Sie können die Serialisierung für Schlüssel und Werte einstellen, obwohl ich vermute, dass der Schlüssel StringRedisSerializer
verwenden sollte.
0
Redisson hat auch Spring Cache integration. Es unterstützt viele populäre Codecs: Jackson JSON, Avro, Lächeln, CBOR, MsgPack, Kryo, FST, LZ4, Snappy und JDK Serialisierung. Hier
ein Beispiel:
@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);
}