redis如今比较长用作缓存服务器,nosql数据库,同时它还具备实现消息的发布订阅的功能。本篇文章将会实现一个用redis实现发布订阅功能的一个demojava
首先用一个实体对象redis
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; } }
咱们会发布这个对象,当这个对象,而且能够更改这个对象 的属性,发布的代码 以下sql
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 的属性,把地址更改成北京,在订阅窗口将会获得以下值nosql
------------------ide
张三this
北京