1、java redis使用之利用jedis实现redis消息队列应用场景最近在公司做项目,需要对聊天内容进行存储,考虑到数据库查询的IO连接数高、连接频繁的因素,决定利用缓存做。从网上了解到redis可以对所有的内容进行二进制的存储,而java是可以对所有对象进行序列化的,序列化的方法会在下面的代码中提供实现。序列化这里我编写了一个java序列化的工具,主要是对对象转换成byte,和根据byte数组反序列化成java对象;主要是用到了ByteArrayOutputStream和ByteArrayInputStream;需要注意的是每个自定义的需要序列化的对象都要实现Serializable接口;
2、其代码如下:?123456789101112131415161718192021222324252627282930313233package com.bean.util;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class ObjectUtil /*对象转byte* param obj* r
3、eturn* throws IOException*/public static byte objectToBytes(Object obj) throws ExceptionByteArrayOutputStream bo = new ByteArrayOutputStream();ObjectOutputStream oo = new ObjectOutputStream(bo);oo.writeObject(obj);byte bytes = bo.toByteArray();bo.close();oo.close();return bytes;/*byte转对象* param byte
4、s* return* throws Exception*/public static Object bytesToObject(byte bytes) throws ExceptionByteArrayInputStream in = new ByteArrayInputStream(bytes);ObjectInputStream sIn = new ObjectInputStream(in);return sIn.readObject();定义一个消息类,主要用于接收消息内容和消息下表的设置。?12345678910111213141516171819202122232425package
5、 com.bean;import java.io.Serializable;/*定义消息类接收消息内容和设置消息的下标* author lenovo*/public class Message implements Serializableprivate static final long serialVersionUID = 7792729L;private int id;private String content;public int getId() return id;public void setId(int id) this.id = id;public String getCon
6、tent() return content;public void setContent(String content) this.content = content;利用redis做队列,我们采用的是redis中list的push和pop操作;结合队列的特点:只允许在一端插入新元素只能在队列的尾部FIFO:先进先出原则redis中lpush(rpop)或rpush(lpop)可以满足要求,而redis中list 里要push或pop的对象仅需要转换成byte即可java采用Jedis进行redis的存储和redis的连接池设置?12345678910111213141516171819202
7、122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614
8、714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624
9、724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634
10、734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644
11、7448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517package com.redis.util;import java.util.List;import java.util.Map;import java.util.Set;im
12、port redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class JedisUtil private static String JEDIS_IP;private static int JEDIS_PORT;private static String JEDIS_PASSWORD;/private static String JEDIS_SLAVE;private static JedisPool jedisPoo
13、l;static Configuration conf = Configuration.getInstance();JEDIS_IP = conf.getString(jedis.ip, 127.0.0.1);JEDIS_PORT = conf.getInt(jedis.port, 6379);JEDIS_PASSWORD = conf.getString(jedis.password, null);JedisPoolConfig config = new JedisPoolConfig();config.setMaxActive(5000);config.setMaxIdle(256);/2
14、0config.setMaxWait(5000L);config.setTestOnBorrow(true);config.setTestOnReturn(true);config.setTestWhileIdle(true);config.setMinEvictableIdleTimeMillis(60000l);config.setTimeBetweenEvictionRunsMillis(3000l);config.setNumTestsPerEvictionRun(-1);jedisPool = new JedisPool(config, JEDIS_IP, JEDIS_PORT, 6
15、0000);/* 获取数据* param key* return*/public static String get(String key) String value = null;Jedis jedis = null;try jedis = jedisPool.getResource();value = jedis.get(key); catch (Exception e) /释放redis对象jedisPool.returnBrokenResource(jedis);e.printStackTrace(); finally /返还到连接池close(jedis);return value;
16、public static void close(Jedis jedis) try jedisPool.returnResource(jedis); catch (Exception e) if (jedis.isConnected() jedis.quit();jedis.disconnect();/* 获取数据* * param key* return*/public static byte get(byte key) byte value = null;Jedis jedis = null;try jedis = jedisPool.getResource();value = jedis
17、.get(key); catch (Exception e) /释放redis对象jedisPool.returnBrokenResource(jedis);e.printStackTrace(); finally /返还到连接池close(jedis);return value;public static void set(byte key, byte value) Jedis jedis = null;try jedis = jedisPool.getResource();jedis.set(key, value); catch (Exception e) /释放redis对象jedisP
18、ool.returnBrokenResource(jedis);e.printStackTrace(); finally /返还到连接池close(jedis);public static void set(byte key, byte value, int time) Jedis jedis = null;try jedis = jedisPool.getResource();jedis.set(key, value);jedis.expire(key, time); catch (Exception e) /释放redis对象jedisPool.returnBrokenResource(j
19、edis);e.printStackTrace(); finally /返还到连接池close(jedis);public static void hset(byte key, byte field, byte value) Jedis jedis = null;try jedis = jedisPool.getResource();jedis.hset(key, field, value); catch (Exception e) /释放redis对象jedisPool.returnBrokenResource(jedis);e.printStackTrace(); finally /返还到
20、连接池close(jedis);public static void hset(String key, String field, String value) Jedis jedis = null;try jedis = jedisPool.getResource();jedis.hset(key, field, value); catch (Exception e) /释放redis对象jedisPool.returnBrokenResource(jedis);e.printStackTrace(); finally /返还到连接池close(jedis);/* 获取数据* * param
21、key* return*/public static String hget(String key, String field) String value = null;Jedis jedis = null;try jedis = jedisPool.getResource();value = jedis.hget(key, field); catch (Exception e) /释放redis对象jedisPool.returnBrokenResource(jedis);e.printStackTrace(); finally /返还到连接池close(jedis);return value;/* 获取数据* * param key* return*/public static byte hget(byte key, byte field) byte value = null;Jedis jedis = null;try jedis = jedisPool.getResource();value = jedis.hg
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2