Для Redis слишком много сценариев приложений. Теперь позвольте мне представить одну из основных функций, публикуйте подписку (Pub/sub).
Введение функции:
Что такое подписка на публикацию для Redis (Pub/sub)? Функция Pub/Sub (означает публикация, подписка) - это функция публикации и подписки. В системах на основе событий Pub/Sub в настоящее время широко используется модель связи. Он принимает события в качестве основного механизма связи для обеспечения слабосвязенной модели взаимодействия, требуемой крупномасштабными системами: абонент (например, клиент) выражает событие или тип события, который он заинтересован в получении в форме подписки на событие; Издатель (например, сервер) может уведомить соответствующих подписчиков о событиях, которые заинтересован в абоненте в любое время. Друзья, которые знакомы с шаблонами дизайна, должны понимать, что это очень похоже на шаблон наблюдателя среди 23 моделей дизайна.
Аналогичным образом, Redis's Pub/Sub - это режим связи сообщений, основная цель состоит в том, чтобы выключить издатель сообщений и подписчик сообщений. Как паб/субсервер, Redis играет функцию маршрутизации сообщений между подписчиками и издателями.
Если вы не понимаете вышеупомянутое профессиональное объяснение, это не имеет значения, но я не понимаю этого.
Проще говоря, здесь также есть концепция канала, что означает канал. Например, если вы подпишитесь на банковский канал, когда ваши средства изменятся, вы примете, что банк отправит вам информацию через свой канал. Здесь вы пассивно получаете, вместо того, чтобы просить банка для получения информации. В этом примере вы - суб (подписчик), а банк - Pub (Pub).
Сценарии приложения проекта:
Я всегда думал, что, прежде чем вы узнаете одну и ту же технологию, вы должны сначала понять, где будет использоваться такая технология, и вы не можете научиться вслепую.
Видя функцию публикации подписок, она идеально подходит для создания простой системы живого чата. Это одно из них, конечно, такие вещи редко вовлечены в наше развитие. Позвольте мне дать вам еще один широко используемый сценарий. В нашей распределенной архитектуре мы часто сталкиваемся с сценариями разделения чтения и записи. В процессе написания вы можете использовать REDIS для публикации подписок, чтобы своевременно опубликованы письменные значения для каждой программы чтения, обеспечивая полную согласованность данных. Например, на веб -сайте блога 100 фанатов подписываются на вас. Когда вы публикуете новую статью, вы можете выдвигать сообщения своим поклонникам. Короче говоря, есть много сцен и нужно изучить. Полем
Просмотрите, как Java управляет Redis:
Redis - это база данных кэша, которая также является структурой C/S, то есть клиента и сервера. Вообще говоря, в Java мы обычно используем Jedis (клиент) для работы Redis (сервер). При работе между ними должно быть установлено соединение. Так же, как ссылка на базу данных, в реляционной базе данных, мы, как правило, поддерживаем пул соединений для достижения повторного использования ссылок, чтобы сэкономить время для установления и закрытия соединений. Таким образом, в Jedis есть также концепция Jedispool (Pool Jedis Connection Pool), и мы все используем соединения из бассейна.
На коде:
Если вы хотите использовать Jedis, вы сначала представите зависимости
<Dependency> <groupid> redis.clients </GroupId> <ratifactid> jedis </artifactid> <serse> 2.9.0 </version> </depervice>
Создать издатель (издатель)
Public Class Publisher Extens Thread {Private Final Jedispool Jedispool; Public Publisher (jedispool jedispool) {this.jedispool = jedispool; } @Override public void run () {BufferedReader Reader = new BufferedReader (New InputStreamReader (System.in)); Jedis jedis = jedispool.getresource (); // Извлекать соединение из пула соединений, пока (true) {String line = null; try {line = reader.readline (); if (! "quit" .equals (line)) {jedis.publish ("mychannel", line); // Нажмите сообщение с канала MyChannel} else {Break; }} catch (ioException e) {e.printstacktrace (); }}}}Создайте другого подписчика
Общедоступный абонент класса Extens jedispubSub {public abcriber () {} @Override public void onMessage (String Channel, String Message) {// Получать сообщение и системы вызова. } @Override public void onSubScribe (String Channel, int intipcedChannels) {// Отписано в канал System. } @Override public void outunSubScribe (String Channel, int intipcedChannels) {// unsubscred wit will system.out.println (string.format ("Unsubscribibe redis -канал, канал %s, подписка. }}Здесь подписчики должны унаследовать jedispubSub, чтобы переписать свои три метода. Целевой комментарий был написан, он очень просто.
Мы просто определяем подписчик здесь и перейдем к каналу подписки ниже.
Общедоступный класс Subthread Extends Thread {Private Final Jedispool Jedispool; Частный окончательный абонент абонент = новый абонент (); Private Final String Channel = "myChannel"; public subthread (jedispool jedispool) {super ("subthread"); this.jedispool = jedispool; } @Override public void run () {System.out.println (string.format ("Подписаться Redis, канал %s, поток будет заблокирован", канал)); Jedis jedis = null; try {jedis = jedispool.getresource (); // взять соединение jedis.subscribe (подписчик, канал); // подписаться через API подписки, параметр - это подписчик и имя канала} Catch (Exception e) {System.out.println (String.format ("Ошибка канала subrcibe, %s", e)); } наконец {if (jedis! = null) {jedis.close (); }}}}Наконец, напишите еще один тестовый класс и запустите его. Введите сообщение на клавиатуре, и подписчик запустит метод OnMessage
открытый класс pubsubdemo {public static void main (string [] args) {// подключиться к серверу redis jedispool jedispool = new jedispool (new jedispoolconfig (), "127.0.0.1", 6379); System.out.println (string.format ("Redis Pool начинается, Redis ip %s, redis port %d", "127.0.0.1", 6379)); Subthread subthread = new subthread (jedispool); // абонент subthread.start (); Publisher Publisher = New Publisher (jedispool); // Publisher Publisher.start (); }}См. Результаты печати
Прикрепите адрес кода https://github.com/fangyong1421/redis
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.