spring中訂閱redis索引值到期訊息通知

來源:互聯網
上載者:User

標籤:over   not   doc   pat   out   odi   apache   osi   序列   

1、首先啟用redis通知功能(ubuntu下操作):
編輯/etc/redis/redis.conf檔案,添加或啟用以下內容(到期通知):

notify-keyspace-events Ex

或者登陸redis-cli之後,輸入以下命令:

config set notify-keyspace-events Ex

更多通知詳見:http://redis.io/topics/notifications#configuration

2、Java Spring中配置監聽

介面類:

import java.io.Serializable;import java.util.Map;public interface IMessageDelegate {  void handleMessage(String message);  void handleMessage(Map message);  void handleMessage(byte[] message);  void handleMessage(Serializable message);  void handleMessage(Serializable message, String channel);}

實作類別:

import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.springframework.stereotype.Service;import rhxtune.smarthome.api.interfaces.IMessageDelegate;import java.io.Serializable;import java.util.Map;@Servicepublic class DefaultMessageDelegate implements IMessageDelegate {    public static Logger logger = LogManager.getLogger(DefaultMessageDelegate.class.getName());    @Override    public void handleMessage(String message) {        logger.info("handleMessage1:" +  message);    }    @Override    public void handleMessage(Map message) {        logger.info("handleMessage2:" +  message);    }    @Override    public void handleMessage(byte[] message) {        logger.info("handleMessage3:" +  message);    }    @Override    public void handleMessage(Serializable message) {        logger.info("handleMessage4:" +  message);    }    @Override    public void handleMessage(Serializable message, String channel) {        logger.info("handleMessage5:" +  message + channel);    }}

spring-redis.xml中配置:

<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:redis="http://www.springframework.org/schema/redis"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/redis http://www.springframework.org/schema/redis/spring-redis.xsd">    <!--<context:component-scan base-package="rhxtune.smarthome.api.repositorys" />-->    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">        <property name="maxTotal" value="${redis.maxTotal}"></property>        <property name="maxIdle" value="${redis.maxIdle}"></property>        <property name="minIdle" value="${redis.minIdle}"></property>        <property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property>        <property name="testOnBorrow" value="${redis.testOnBorrow}"></property>    </bean>    <bean id="jedisConnFactory"          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">        <property name="hostName" value="${redis.hostname}" />        <property name="port" value="${redis.port}" />        <property name="timeout" value="${redis.timeout}" />        <property name="database" value="${redis.database}" />        <property name="password" value="${redis.password}" />        <property name="usePool" value="true" />        <property name="poolConfig" ref="jedisPoolConfig" />    </bean>    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">        <!-- 序列化方式 建議key/hashKey採用StringRedisSerializer。 -->        <property name="keySerializer">            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />        </property>        <property name="hashKeySerializer">            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />        </property>        <property name="valueSerializer">            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />        </property>        <property name="hashValueSerializer">            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />        </property>        <property name="connectionFactory" ref="jedisConnFactory" />    </bean>    <!-- 對string操作的封裝 -->    <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">        <property name="connectionFactory" ref="jedisConnFactory" />    </bean>    <!-- 設定redis訊息訂閱(方式1) -->    <!--<bean id="listener" class="rhxtune.smarthome.api.services.DefaultMessageDelegate" />    <redis:listener-container connection-factory="jedisConnFactory">        <redis:listener ref="listener" method="handleMessage" topic="[email protected]__:expired" />    </redis:listener-container>-->    <!-- 設定redis訊息訂閱(方式2) -->    <bean id="messageListener"          class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">        <constructor-arg>            <bean class="rhxtune.smarthome.api.services.DefaultMessageDelegate" />        </constructor-arg>    </bean>    <bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">        <property name="connectionFactory" ref="jedisConnFactory" />        <property name="messageListeners">            <map>                <entry key-ref="messageListener">                    <list>                        <bean class="org.springframework.data.redis.listener.ChannelTopic">                            <constructor-arg value="[email protected]__:expired" />                        </bean>                        <bean class="org.springframework.data.redis.listener.PatternTopic">                            <constructor-arg value="*" />                        </bean>                        <bean class="org.springframework.data.redis.listener.PatternTopic">                            <constructor-arg value="‘__key*__:*" />                        </bean>                    </list>                </entry>            </map>        </property>    </bean></beans>

更多詳情參見:http://docs.spring.io/spring-data/redis/docs/1.7.1.RELEASE/reference/html/#redis:pubsub:subscribe

spring中訂閱redis索引值到期訊息通知

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.