标签:redis 发布订阅
redis现在比较长用做缓存服务器,nosql数据库,同时它还具有实现消息的发布订阅的功能。本篇文章将会实现一个用redis实现发布订阅功能的一个demo
首先用一个实体对象
package com.wtf.demo.redis; import java.io.Serializable; public class UserBean implements Serializable { private String username; private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
我们会发布这个对象,当这个对象,并且可以更改这个对象 的属性,发布的代码 如下
package com.wtf.demo.redis; import redis.clients.jedis.Jedis; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class TestPub { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub Jedis jedis = new Jedis("127.0.0.1",6379); UserBean ub = new UserBean(); ub.setUsername("张三"); ub.setAddress("上海市"); ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream op = new ObjectOutputStream(os); op.writeObject(ub); String msg1 = os.toString("ISO-8859-1"); jedis.publish("ub", msg1); } }
发布完成以后,我们建立一个订阅的类,以上发布了ub这个对象,在订阅类中,我们需要JedisPubSub这个对象,并且实现里面的相关方法。
package com.wtf.demo.redis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPubSub; import java.io.ByteArrayInputStream; import java.io.ObjectInputStream; public class TestSub { public static void main(String[] args) { Jedis jedis = new Jedis("uat.www.nanapanda.cn",6379); JedisPubSub jedisPubSub = new JedisPubSub() { @Override public void onUnsubscribe(String channel, int subscribedChannels) { } @Override public void onSubscribe(String channel, int subscribedChannels) { } @Override public void onPUnsubscribe(String pattern, int subscribedChannels) { } @Override public void onPSubscribe(String pattern, int subscribedChannels) { } @Override public void onPMessage(String pattern, String channel, String message) { } @Override public void onMessage(String channel, String message) { try { ByteArrayInputStream bis = new ByteArrayInputStream( message.getBytes("ISO-8859-1"));//此处指定字符集将字符串编码成字节数组,此处的字符集需要与发布时的字符集保持一致 ObjectInputStream ois = new ObjectInputStream(bis); UserBean bean = (UserBean) ois.readObject(); System.out.println(bean.getUsername()); System.out.println(bean.getAddress()); } catch (Exception e) { e.printStackTrace(); } finally { } } }; jedis.subscribe(jedisPubSub, "ub"); } }
这样在运行 了TestPub类以后,再运行TestSub类,将会有如下输出
--------------------
张三
上海市
在TestPub中更改UserBean 的属性,把地址更改为北京,在订阅窗口将会得到如下值
------------------
张三
北京
标签:redis 发布订阅
原文地址:http://wtf0313.blog.51cto.com/1093061/1712136