Может ли snappy использоваться с Redis
После того, как я сжал данные Snappy, а затем сохранил их в Redis. Но когда я взял его из Redis, я обнаружил, что данные разные. Я не знаю почему
1 ответ
Да, алгоритм сжатия Snappy можно использовать с Redis. На самом деле, вы можете использовать любой алгоритм сжатия. Что касается Redis, то это всего лишь байты. То, что redis называет "Strings", более традиционно называется "байтовым массивом" в языках программирования.
Если вы видите разные значения, это, скорее всего, проблема с тем, как вы читаете значения. Некоторые клиентские библиотеки redis пытаются декодировать ответ как UTF-8, но это не то, что вы хотите. Посмотрите документацию вашей клиентской библиотеки и используйте метод, который позволяет вам устанавливать и получать значения в виде байтовых массивов.
Да, это ответ. Если ваша проблема на Java. Вы можете проверить этот репозиторий здесь, с тем, что я сделал для сжатия и сериализации https://github.com/cboursinos/java-spring-redis-compression-snappy-kryo
Java-пружинные-Redis-компрессионного мгновенным-Kryo
Вот пример конфигурации данных Spring Spring Boot Redis Cluster Data.
Это реализация с Redis Cluster и Redis Cache Manager.
Быстрое Сжатие
Крио Сериализация
Поддержка TTL на ключ кеша
Конфигурация Gradle
- весна-данные-Redis
- салат-жильный
- мгновенная-ява
- Kryo
- Обще-кодек
Свойства приложения
data.rediscluster.nodes=redis1.foo.com:6379,redis2.foo.com:6379,redis3.foo.com:6379,redis4.foo.com:6379,redis5.foo.com:6379,redis6.foo.com:6379
data.rediscluster.ttl=2700
data.rediscluster.redirects=3
Как это использовать
RedisCacheConfiguration.defaultCacheConfig()
.disableKeyPrefix()
.disableCachingNullValues()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericSnappyRedisSerializer()))
.entryTtl(Duration.ofSeconds(ttl));