java直接使用redis
使用版本
redis-4.0.6
jedis-2.9.0.jar
spring4.3.13
spring-data-redis-1.8.3.jar
spring-data-commons-2.0.1.jar
一共两篇,第一篇是java直接使用redis,第二篇使用spring整合redis。
先看下目录(就五个文件):
user目录下的User.java是将要使用redis存储的类,SerializeUtil.java是用来序列化和反序列化类文件的。
先看一下User.java:
package user; import java.io.Serializable; /** * @author 朱宏亮 * @version 创建时间:2017年12月19日 下午2:00:53 * 类说明 */ public class User implements Serializable{ private static final long serialVersionUID = 1L; private String id; private String name; private String phone; private String address; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
SerializeUtil.java:
package user; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * @author 朱宏亮 * @version 创建时间:2017年12月19日 下午2:23:20 * 类说明 */ public class SerializeUtil { /** * 序列化 * @param object * @return */ public static byte[] serialize(Object object){ ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try{ baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; }catch(Exception e){ } return null; } /** * 反序列化 * @param bytes * @return */ public static Object unserialize(byte[] bytes){ ByteArrayInputStream bais = null; try{ bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); }catch(Exception e){ } return null; } }
然后我们写一个简单的java代码来连接redis,看看能否成功
Test.java:
import java.util.Iterator; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedis; import user.SerializeUtil; import user.User; /** * 和spring没有关系 * @author Administrator * */ public class Test { @SuppressWarnings("resource") public static void main(String[] args) { //连接 Redis 服务 Jedis jedis = new Jedis("你的Redis服务的ip地址", 6379); jedis.auth("redis的密码,没有密码的就把这行注释了"); //查看服务是否运行 System.out.println("Server is running: "+jedis.ping()); jedis.set("test", "123"); System.out.println("test:"+jedis.get("test")); System.out.println("============================================="); jedis.lpush("skill-list", "如来神掌" ); jedis.lpush("skill-list", "独孤九剑"); jedis.lpush("skill-list", "凌波微步"); List list = jedis.lrange("skill-list", 0, 2); for(String s : list){ System.out.println(s); } System.out.println("============================================="); Set keys = jedis.keys("*"); Iterator it = keys.iterator(); while(it.hasNext()){ String key = it.next(); System.out.println(key); } System.out.println("============================================="); /** * 存一个对象 */ User user1 = new User(); user1.setId("18"); user1.setName("蜡笔小新"); user1.setPhone("18628889999"); user1.setAddress("北京市海淀区中关村软件园大飞碟"); jedis.set("user1".getBytes(), SerializeUtil.serialize(user1)); User user2 = (User) SerializeUtil.unserialize(jedis.get("user1".getBytes())); System.out.println("id:\t"+user2.getId()); System.out.println("name:\t"+user2.getName()); System.out.println("phone:\t"+user2.getPhone()); System.out.println("address:\t"+user2.getAddress()); } }
运行Test.java文件,在Eclipse的控制台看到输出:
Server is running: PONG test:123 ============================================= 凌波微步 独孤九剑 如来神掌 ============================================= user1 spring-redis-key redisChat test skill-list redisUser ============================================= id: 18 name: 蜡笔小新 phone: 18628889999 address: 北京市海淀区中关村软件园大飞碟
上面运行的没毛病,然后我们实现一个简单的发布者和订阅者自动监听,俩文件。
发布者TestProducer.java:
import redis.clients.jedis.Jedis; /** * @author 朱宏亮 * @version 创建时间:2017年12月21日 下午4:48:28 * 类说明 消息发布者 和spring没有关系 */ public class TestProducer{ public static String ip = "你的redisip"; public static String pw = "你的密码"; @SuppressWarnings("resource") public static void main(String[] args) throws InterruptedException { /* for(int i = 0 ; i < 3 ; i ++ ){ Thread thread = new Thread(){ public void run() { go(); } }; thread.start(); }*/ Jedis jedis = new Jedis( ip , 6379); jedis.auth(pw); jedis.publish("redisChat", "Redis真好玩"); Thread.sleep(2000); jedis.publish("redisChat", "请开始你的表演"); Thread.sleep(2000); jedis.publish("redisChat", "皮皮虾我们走!"); } @SuppressWarnings("resource") public static void go(){ Jedis jedis = new Jedis( ip , 6379); jedis.auth(pw); jedis.publish("redisChat", "又一个发布者"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } jedis.publish("redisChat", "发送一些信息"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } jedis.publish("redisChat", "嘿嘿嘿"); } }
自动监听的订阅者TestConsumer.java:
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPubSub; /** * @author 朱宏亮 * @version 创建时间:2017年12月21日 下午4:35:51 * 类说明 消息订阅者,消息监听 和spring没有关系 */ public class TestConsumer extends JedisPubSub { @Override public void onMessage(String channel, String message) { System.out.println(channel + "," + message); } @Override public void onPMessage(String pattern, String channel, String message) { System.out.println(pattern + "," + channel + "," + message); } @Override public void onSubscribe(String channel, int subscribedChannels) { System.out.println("onSubscribe: channel[" + channel + "]," + "subscribedChannels[" + subscribedChannels + "]"); } @Override public void onUnsubscribe(String channel, int subscribedChannels) { System.out.println("onUnsubscribe: channel[" + channel + "], " + "subscribedChannels[" + subscribedChannels + "]"); } @Override public void onPUnsubscribe(String pattern, int subscribedChannels) { System.out.println("onPUnsubscribe: pattern[" + pattern + "]," + "subscribedChannels[" + subscribedChannels + "]"); } @Override public void onPSubscribe(String pattern, int subscribedChannels) { System.out.println("onPSubscribe: pattern[" + pattern + "], " + "subscribedChannels[" + subscribedChannels + "]"); } @SuppressWarnings("resource") public static void main(String[] args) { Jedis jedis = new Jedis("你的redisip", 6379); jedis.auth("你的redis密码"); TestConsumer listener = new TestConsumer(); jedis.subscribe(listener, "redisChat"); } }
然后我们先启动TestConsumer.java,然后再启动TestProducer.java,Eclipse的控制台输出:
onSubscribe: channel[redisChat],subscribedChannels[1] redisChat,Redis真好玩 redisChat,请开始你的表演 redisChat,皮皮虾我们走!
看到这个输出之后,发现TestConsumer.java文件并没结束,他还保持着监听状态,当发布者再次发布消息时,订阅者还是可以接受到信息。
使用java使用redis就是这么简单,下一篇来看看spring+整合redis的操作。
源代码下载地址: https://gitee.com/zhuhongliang/RedisStudy