Может ли 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.

  1. Быстрое Сжатие

  2. Крио Сериализация

  3. Поддержка TTL на ключ кеша

Конфигурация Gradle

  1. весна-данные-Redis
  2. салат-жильный
  3. мгновенная-ява
  4. Kryo
  5. Обще-кодек

Свойства приложения

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));
Другие вопросы по тегам