Статьи

Spring Data с Redis

Проект Spring Data предоставляет решение для доступа к данным, хранящимся в новых технологиях, таких как базы данных NoSQL и облачные сервисы. Когда мы смотрим в репозиторий SpringSource git, мы видим много подпроектов spring-data:

  • spring-data-commons : общие интерфейсы и служебный класс для других проектов spring-data.
  • spring-data-column : поддержка баз данных на основе столбцов. Это еще не началось, но будет поддержка Cassandra и HBase
  • spring-data-document : поддержка баз данных документов. В настоящее время поддерживаются MongoDB и CouchDB.
  • spring-data-graph: поддержка баз данных на основе графа. В настоящее время Neo4j поддерживается.
  • spring-data-keyvalue : поддержка баз данных ключ-значение. В настоящее время Redis и Riak поддерживаются и, возможно, Membase будет поддерживаться в будущем.
  • spring-data-jdbc-ext : расширения JDBC, в качестве примера реализовано аварийное переключение соединения Oracle RAC.
  • spring-data-jpa : упрощает уровень доступа к данным на основе JPA.

Я хотел бы поделиться с вами, как вы можете использовать Redis. Первый шаг — загрузить его с веб-страницы redis.io . try.redis-db.com — это полезный сайт, на котором мы можем запускать команды Redis . Он также предоставляет пошаговое руководство. Этот урок показывает нам все структуры, которые поддерживает Redis (список, набор, отсортированный набор и хэши) и некоторые полезные команды. Многие авторитетные сайты сегодня используют Redis .

После загрузки и распаковки мы должны скомпилировать Redis (версия 2.2, кандидат на выпуск является предпочтительным вариантом, так как некоторые команды не работают в версии 2.0.4).

make

sudo make install

После того, как мы запустим эти команды, у нас все настроено для запуска следующих пяти команд:

  • redis-benchmark — для бенчмаркинга сервера Redis
  • redis-check-aof — проверьте AOF (Aggregate Objective Function), и он может это исправить.
  • redis-check-dump — проверять файлы rdb на наличие необработанных кодов операций.
  • redis-cli — клиент Redis.
  • редис-сервер — редис-сервер.

Мы можем проверить сервер Redis.

redis-server

[1055] 06 Jan 18:19:15 # Warning: no config file specified, using the default config. In order to specify a config file use 'redis-server /path/to/redis.conf'

[1055] 06 Jan 18:19:15 * Server started, Redis version 2.0.4

[1055] 06 Jan 18:19:15 * The server is now ready to accept connections on port 6379

[1055] 06 Jan 18:19:15 - 0 clients connected (0 slaves), 1074272 bytes in use

и Redis клиент.

 redis-cli

redis> set my-super-key "my-super-value"

OK

Теперь мы создадим простой Java-проект, чтобы показать, насколько на самом деле прост модуль Spring-data-redis.

mvn archetype:create -DgroupId=info.pietrowski -DpackageName=info.pietrowski.redis 
-DartifactId=spring-data-redis -Dpackage=jar

Затем мы должны добавить в pom.xml вехой репозиторий Spring и добавить Spring-data-redis в качестве зависимости. После этого будут получены все необходимые зависимости.

Затем мы создаем папку ресурсов в главной папке и создаем файл application.xml, который будет иметь всю конфигурацию.

Мы можем настроить JedisConnectionFactory , двумя различными способами, один — мы можем обеспечить JedisShardInfo объект в shardInfo собственности. Второе — мы можем предоставить свойства host (по умолчанию localhost), port (по умолчанию 6379), password (по умолчанию пусто) и timeout (по умолчанию 2000). Следует иметь в виду, что объект JedisShardInfo имеет приоритет и позволяет устанавливать вес, но позволяет только инжекцию конструктора.

Мы можем настроить фабрику для использования пула соединений, установив для свойства пула значение true (по умолчанию).

Посмотрите комментарии application.xml, чтобы увидеть три различных способа настройки.

Примечание . Поддерживаются две разные библиотеки: Jedis и JRedis. У них очень похожие имена, и у обоих одинаковое название фабрики. Увидеть разницу:

  • org.springframework.data.keyvalue.redis.connection.jedis.JedisConnectionFactory
  • org.springframework.data.keyvalue.redis.connection.j r edis.J r edisConnectionFactory

Подобно тому, что мы делаем в Spring, мы настраиваем объект шаблона, предоставляя ему фабрику соединений. Мы выполним все операции через этот объект шаблона. По умолчанию нам нужно предоставить только фабрику соединений, но мы можем предоставить больше свойств:

  • exposeConnection (по умолчанию false) — если мы возвращаем реальное соединение или объект прокси.
  • keySerializer, hashKeySerializer, valueSerializer, hashValueSerializer (JdkSerializationRedisSerializer по умолчанию), который делегирует сериализацию механизму сериализации Java.
  • stringSerializer (по умолчанию StringRedisSerializer), который является простым сериализатором String to byte [] (и обратно) с кодировкой UTF8.

Мы готовы выполнить некоторый код, который будет взаимодействовать с экземпляром Redis. Spring-Data предоставляет нам два способа взаимодействия. Первый — использование метода execute и предоставление объекта RedisCallback . Во-вторых, с помощью * помощников операций (это будет объяснено позже)

Когда мы используем RedisCallback, у нас есть доступ к командам Redis низкого уровня, посмотрите этот список интерфейсов (я не буду помещать здесь все методы, потому что это огромный список):

  • RedisConnection — собирает все команды Redis плюс управление соединением.
  • RedisCommands — собирает все команды Redis (перечислены любимые).
  • RedisHashCommands — специфичные для хэша команды Redis.
  • RedisListCommands — специфичные для списка команды Redis.
  • RedisSetCommands — специфичные для набора команды Redis.
  • RedisStringCommands — специфичные для ключа / значения команды Redis.
  • RedisTxCommands — Команды Redis для транзакций / пакетов .
  • RedisZSetCommands — отсортированные для набора команды Redis.

Проверьте класс RedisCallbackExample, это был трудный путь, и проблема в том, что мы должны конвертировать наши объекты в байтовые массивы в обоих направлениях, второй способ проще. Spring Data предоставляет нам объекты Operations, поэтому у нас гораздо более простой API, и все байтовые <-> преобразования объектов выполняются с помощью настроенного нами сериализатора (или по умолчанию). API более высокого уровня (вы легко узнаете эквиваленты * Operation * Commands ):

Большинство методов получают ключ в качестве первых параметров, поэтому у нас есть еще лучший API для нескольких операций над одним ключом:

Проверьте класс RedisCallbackExample, чтобы увидеть несколько простых примеров использования * операций . Важно отметить, что для ключей следует использовать stringSerializer, иначе у вас будут проблемы с другими клиентами, потому что стандартная сериализация добавляет информацию о классе. В противном случае вы получите такие ключи, как:

  1. «\ XAC \ фиксировано \ x00 \ x05t \ x00 \ x05atInt»
  2. «\ XAC \ фиксировано \ x00 \ x05t \ x00 \ nmySuperKey»
  3. «\ XAC \ фиксировано \ x00 \ x05t \ x00 \ bsuperKey»

До сих пор мы только что проверили API для Redis, но Spring Data предлагает больше для нас. Все классные вещи находятся в пакете org.springframework.data.keyvalue.redis.support и во всех подпакетах. У нас есть:

  • RedisAtomicInteger — атомное целое число (операция CAS), поддерживаемое Redis.
  • RedisAtomicLong — То же, что и предыдущий для Long.
  • RedisList — Расширение Redis для List , Queue , Deque , BlockingDeque и BlockingQueue с двумя дополнительными методами Range list (начало, конец) и RedisList trim (начало, конец) .
  • RedisSet — Расширение Redis для Set с дополнительными методами: diff , diffAndStore , intersect , intersectAndStore , union , unionAndStore .
  • RedisZSet — Расширение Redis для SortedSet . Обратите внимание, что Comparator здесь не применим, поэтому этот интерфейс расширяет обычный Set и предоставляет надлежащие методы, аналогичные SortedSet .
  • RedisMap — Расширение Redis для Map с дополнительным методом Long increment (key, delta)

Каждый интерфейс в настоящее время имеет одну реализацию по умолчанию. Проверьте application-support.xml для примеров конфигурации и RedisSupportClassesExample для примеров использования. В комментариях также много полезной информации.

Резюме

Библиотека является первой вехой, поэтому есть небольшие ошибки, документация не так совершенна, как мы привыкли, и текущая версия не нуждается в стабильном сервере Redis. Но это, безусловно, отличная библиотека, которая позволяет нам использовать все эти классные вещи из NoSQL «стандартным» способом Spring Data Access.

Отличная работа!

Этот пост полезен только в том случае, если вы извлекаете код: из bitbucket, для ленивых здесь также есть zip-файл spring-data-redis .

Это сообщение родом из http://pietrowski.info/2011/01/spring-data-redis-tutorial/