应用场景
- 为什么要用redis?
二进制存储、java序列化传输、IO连接数高、连接频繁
一、序列化
这里编写了一个java序列化的工具,主要是将对象转化为byte数组,和根据byte数组反序列化成java对象; 主要是用到了ByteArrayOutputStream和ByteArrayInputStream; 注意:每个需要序列化的对象都要实现Serializable接口;
其代码如下:
1 package Utils; 2 import java.io.*; 3 /** 4 * Created by Kinglf on 2016/10/17. 5 */ 6 public class ObjectUtil { 7 /** 8 * 对象转byte[] 9 * @param obj 10 * @return 11 * @throws IOException 12 */ 13 public static byte[] object2Bytes(Object obj) throws IOException{ 14 ByteArrayOutputStream bo=new ByteArrayOutputStream(); 15 ObjectOutputStream oo=new ObjectOutputStream(bo); 16 oo.writeObject(obj); 17 byte[] bytes=bo.toByteArray(); 18 bo.close(); 19 oo.close(); 20 return bytes; 21 } 22 /** 23 * byte[]转对象 24 * @param bytes 25 * @return 26 * @throws Exception 27 */ 28 public static Object bytes2Object(byte[] bytes) throws Exception{ 29 ByteArrayInputStream in=new ByteArrayInputStream(bytes); 30 ObjectInputStream sIn=new ObjectInputStream(in); 31 return sIn.readObject(); 32 } 33 }
二、消息类(实现Serializable接口)
package Model; import java.io.Serializable; /** * Created by Kinglf on 2016/10/17. */ public class Message implements Serializable { private static final long serialVersionUID = -389326121047047723L; private int id; private String content; public Message(int id, String content) { this.id = id; this.content = content; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
三、Redis的操作
利用redis做队列,我们采用的是redis中list的push和pop操作;
结合队列的特点:
只允许在一端插入新元素只能在队列的尾部FIFO:先进先出原则
Redis中lpush头入
(rpop尾出
)或rpush尾入
(lpop头出
)可以满足要求,而Redis中list药push或 pop的对象仅需要转换成byte[]即可