1. 程式人生 > >使用Spring Data Redis 實現訂閱/釋出

使用Spring Data Redis 實現訂閱/釋出

Redis

Redis是一個key-value的儲存系統,提供的key-value的資料介面,其效能非常的出色,一般常用作快取使用,但是其除了可以作為快取之外,自身也提供了一套訂閱/釋出的系統。

Spring Data Redis

Spring Data Redis是Spring的一套框架,提供了Redis 的各種操作,可以讓我們便捷的操作Redis,本文介紹一下基於Spring Data Redis實現的訂閱/釋出(pub/sub)系統。

PUB/SUB

Spring Data Redis中對Redis的操作是通過Spring封裝的一個redisTemplate實現的,在spring的配置檔案中進行一些相關的Redis配置資訊即可使用。

Spring配置:

<!-- 定義Spring Redis連線工廠 -->
<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="${redis.url}" />
    <property name="port" value="${redis.port}" />
    <property name
="password" value="${redis.password}" />
<property name="database" value="0" /> <property name="usePool" value="true" /> </bean> <!-- 定義Spring RedisTemplate --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connectionFactory-ref
="redisConnectionFactory"/>
<bean id="redisService" class="com.test.redis.impl.RedisServicempl"> <property name="redisTemplate" ref="redisTemplate" /> </bean> <!-- 定義Spring Redis的序列化器 --> <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" /> <bean id="jsonRedisSerializer" class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" /> <!-- 定義Redis 監聽類 --> <bean id="dataSyncEventListener" class="com.test.redis.DataSyncEventListener" /> <!-- 註冊Redis訊息訂閱的監聽器 --> <redis:listener-container> <redis:listener ref="dataSyncEventListener" serializer="jsonRedisSerializer" method="onMessage" topic="topic" /> </redis:listener-container>

在這裡,需要一點注意,訂閱訊息的監聽類,可以實現MessageListener介面或MessageDelegateListener介面,如何不想實現任何介面,則需要在method指定“handleMessage”方法名,並自己實現handleMessage方法。

Redis操作類:

public class RedisServiceImpl implements RedisService {

    @AutoWired
    private RedisTemplate<String, Object> redisTemplate;

    @Override
    public void sendMessage(String channel, Serializable message) {
        redisTemplate.convertAndSend(channel, message);
    }
}

可以看到,通過這個 sendMessage方法,可以把一條可序列化的訊息傳送到channel頻道,訂閱者只要訂閱了這個channel,他就會接收發布者釋出的訊息.。

訊息監聽類:

public class DataSyncEventListener implements MessageListener {
    @Autowired
    private RedisSerializer<String> stringRedisSerializer;

    @Autowired
    private RedisSerializer<Object> jsonRedisSerializer;

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String channel = stringRedisSerializer.deserialize(message.getChannel());
        Object object = jsonRedisSerializer.deserialize(message.getBody());
        System.out.println("channel is :" + channel);
        System.out.println("message is :" + object.toString);
    }
}

當然有了釋出訊息的sendMessage,也得有個接收訊息的Listener,用於接收訂閱到的訊息。

這樣,Redis的PUB/SUB訂閱釋出系統就配置完成了。

相關推薦

使用Spring Data Redis 實現訂閱/釋出

Redis Redis是一個key-value的儲存系統,提供的key-value的資料介面,其效能非常的出色,一般常用作快取使用,但是其除了可以作為快取之外,自身也提供了一套訂閱/釋出的系統。 Spring Data Redis Spring Dat

spring-data-redis實現redis釋出訂閱

maven 依賴包 <properties> <spring.version>5.1.0.RELEASE</spring.version> </properties> <dependencies

shiro+cas+spring-data-redis實現多系統單點登入和分散式專案的session同步

CSDN開通很久了,但是一直沒寫東西,2018年了,這是我CSDN的第一篇文章,歡迎各位評論探討和指點。   一、背景: 現在公司的業務系統要做多臺分散式叢集,由於是web專案,要做session同步,想到的方案是用目前火熱的redis資料庫儲存session,還有業

window下redis的常用命令、spring結合redis實現訊息釋出監聽系統

     redis是近幾年比較流行的基於記憶體的高效能key-value持久化非關係型資料庫,redis也可與spring結合做非同步消費釋出監聽系統 redis下載地址: https://download.csdn.net/download/higherzj

Spring Spring-data-redis 實現的訊息佇列

配置環境 版本資訊: Spring 4.2.8.RELEASE(其中囊括tx、webmvc、context、aop之類的) Spring-data-jpa 1.10.5.RELEASE Spring-data-redis 1.8.0.RELEASE

SpringBoot整合Spring-data-redis實現集中式快取

從框架的角度來看,儲存在Redis中的資料只是位元組。雖然說Redis支援多種資料型別,但是那只是意味著儲存資料的方式,而不是它所代表的內容。由我們將這些資料轉化成字串或者是其他物件。我們通過org.springframework.data.redis.serializer. RedisSerializer

Spring Session Data Redis實現session共享

web.xml odi 數據庫 tails spool ima 配置步驟 配置文件 work 1.前言   在開發中遇到一個關於用戶體驗的問題,每次當運維進行更新重啟服務器時,都會導致會員平臺中已登錄的用戶掉線。這是因為每個用戶的會話信息及狀態都是由session來保存的,

spring-session-data-redis 實現session共享

1.新增依賴 <dependency>             <groupId>redis.clients</groupId>             <

Spring Data Redis 二:RedisTemplate實現事物問題剖析和解決

三、解決方案  只能自己實現RedisCallBack底層,採用RedisTemplate的SesionCallback來完成在同一個Connection中,完成多個操作的方法: SessionCallback<Object> sessionCallback=new SessionCa

Spring-data-redis: pub/sub訊息訂閱

 Redis中pub/sub特性,可以用來實現類似與JMS的“topic”功能,只不過這些訊息無法被持久化而已。spring-data-redis元件中對pub/sub提供了類似JMS的程式設計模式,我們通過例項來展示如何使用。     需要注意的是,在redis中訊息

Spring-data-Redis SpringMvc + Redis 實現 redis快取報錯處理 序列化 反序列化報錯

1. 解決辦法: 在所使用的 java bean xxx.xxx.Account 新增預設的構造方法 public Account(){}    org.springframework.data.redis.serializer.SerializationException:

springboot整合redis實現訊息釋出訂閱模式-雙通道(跨多伺服器)

  基礎配置參考https://blog.csdn.net/llll234/article/details/80966952   查看了基礎配置那麼會遇到一下幾個問題: 1.實際應用中可能會訂閱多個通道,而一下這種寫法不太通用container.addMessageListener

SpringBoot中使用Spring Data Jpa 實現簡單的動態查詢的兩種方法

ppr eat value table 得到 blog .net ride integer 首先謝謝大佬的簡書文章:http://www.jianshu.com/p/45ad65690e33# 這篇文章中講的是spring中使用spring data jpa,使用了xml配

Spring整合Redis(spring-data-redis)

nds 獲取 可能 div 普通 工具 long red 等待 歷經幾天看了大量的博客資料,差不多算是搞定了,目前只是針對單個數據源,集群暫時沒研究 maven依賴 <properties> <!-- redis 版本 --> &l

Spring集成Redis方案(spring-data-redis)(基於Jedis的單機模式)(待實踐)

packaging 基於 .cn @override time Coding 很好 -o -i 繼上一篇文章http://www.cnblogs.com/EasonJim/p/7625738.html中提到的幾款客戶端,它們基本都能和Spring集成。 下面介紹的是基於S

使用Spring Data Redis操作Redis(單機版)

nec one com list() 研究 enc keys wire 設置ip Jedis是一款Java連接Redis的客戶端,Spring基於Jedis進行了封裝,提供了簡潔的操作Redis的方法。那就是Spring Data Redis。其實後來研究發現,Spring

Spring Boot + spring-data-redis

調用 ons cor spring edi start ota struct out Redis Redis是緩存, 消息隊列, 多種類型的key-value存儲服務. Spring Boot Spring Boot為Lettcue和Jedis客戶端提供自動註入配置

Spring Boot中使用Spring-data-jpa實現分頁查詢(轉)

分頁查詢 log def inpu database ext identity odin btn 在我們平時的工作中,查詢列表在我們的系統中基本隨處可見,那麽我們如何使用jpa進行多條件查詢以及查詢列表分頁呢?下面我將介紹兩種多條件查詢方式。 1、引入起步依賴

Spring Data Redis入門示例:程序配置(五)

dex port scl lis fault gre source inf 操作 單機配置 redis.properties配置 #redis的服務器地址 redis.host=127.0.0.1 #redis的服務端口 redis.port=6379 #客戶端超時時間

Spring Data Redis整體介紹 (一)

目前 擴展 刪除 依據 實例化 -m doc 不同的 SDR 為什麽使用Spring Data Redis 首先Spring Data Redis 是Spring 框架提供的用於操作Redis的客戶端。 Spring框架是一個全棧Java程序框架,通過DI、AOP和便攜的服