5.redis的订阅模式

 

比如,你银行账号存款有变动,会收到短信,邮件等.

Subscribe:监听通道(监听一个叫chat的通道)

Publish :向通道发送消息

 

客户端1

客户端2

代码段 小部件

在spring中应用

  1. 除了RedisTemplate之外
  2. 需要实现MessageListener的实现类
  3. 以及运行listener的容器RedisMessageListenerContainer

 

MessageListener 实现类

@Component

public class MyRedisListener implements MessageListener {

    @Autowired

    RedisTemplate redisTemplate;

    @Override

    public void onMessage(Message message, byte[] bytes) {

        byte[] body = message.getBody();

        String myBody = (String) redisTemplate.getStringSerializer().deserialize(body);

        System.out.println("消息体:"+myBody);



        byte[] chat = message.getChannel();

        String myChat = redisTemplate.getStringSerializer().deserialize(chat).toString();

        System.out.println("通道名称:"+myChat);



        System.out.println(new String(bytes));



    }

}

2.spring-mvc-redis.xml    

<mvc:annotation-driven/>

    <context:component-scan base-package="Dao,Tenseven"/>

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">

        <property name="maxIdle" value="50"/>

        <property name="maxTotal" value="100"/>

        <property name="maxWaitMillis" value="20000"/>

    </bean>

    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">

        <property name="hostName" value="localhost"/>

        <property name="port" value="6379"/>

        <property name="poolConfig" ref="poolConfig"/>

    </bean>

    <bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>

deserialize

    <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>



    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">

        <property name="connectionFactory" ref="connectionFactory"/>

        <property name="hashKeySerializer" ref="stringRedisSerializer"/>

        <property name="hashValueSerializer" ref="stringRedisSerializer"/>

    </bean>





    <bean id="messageListener" class="ShiBa.MyRedisListener"/>

    <bean class="org.springframework.data.redis.listener.RedisMessageListenerContainer">

        <property name="connectionFactory" ref="connectionFactory"/>

        <!--配置连接池,这里只要连接池生存,就会监听-->

        <property name="taskExecutor">

            <bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">

            <property name="poolSize" value="3"/>

            </bean>

        </property>

        <!--配置监听者-->

        <property name="messageListeners">

            <map>

                <!--监听类-->

                <entry key-ref="messageListener">

                    <bean class="org.springframework.data.redis.listener.ChannelTopic">

                        <constructor-arg value="chat"/>

                    </bean>

                </entry>

            </map>

        </property>

</bean>

3.运行类

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = "classpath:spring-mvc-redis.xml")

public class RedisSimpleTest{

    @Autowired

    private RedisTemplate redisTemplate;    

@Test

    public void test3 (){

        String channel = "chat";

        redisTemplate.convertAndSend(channel,"wo shi lcc");

    }



}

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值