日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(转)java redis使用之利用jedis实现redis消息队列

發布時間:2023/12/31 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转)java redis使用之利用jedis实现redis消息队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

應用場景

最近在公司做項目,需要對聊天內容進行存儲,考慮到數據庫查詢的IO連接數高、連接頻繁的因素,決定利用緩存做。

從網上了解到redis可以對所有的內容進行二進制的存儲,而java是可以對所有對象進行序列化的,序列化的方法會在下面的代碼中提供實現。

序列化

這里我編寫了一個java序列化的工具,主要是對對象轉換成byte[],和根據byte[]數組反序列化成java對象;

主要是用到了ByteArrayOutputStream和ByteArrayInputStream;

需要注意的是每個自定義的需要序列化的對象都要實現Serializable接口;

其代碼如下:

package 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* @return* @throws IOException*/public static byte[] objectToBytes(Object obj) throws Exception{ByteArrayOutputStream bo = new ByteArrayOutputStream();ObjectOutputStream oo = new ObjectOutputStream(bo);oo.writeObject(obj);byte[] bytes = bo.toByteArray();bo.close();oo.close();return bytes;}/**byte[]轉對象* @param bytes* @return* @throws Exception*/public static Object bytesToObject(byte[] bytes) throws Exception{ByteArrayInputStream in = new ByteArrayInputStream(bytes);ObjectInputStream sIn = new ObjectInputStream(in);return sIn.readObject();} }

定義一個消息類,主要用于接收消息內容和消息下表的設置。

package com.bean;import java.io.Serializable;/**定義消息類接收消息內容和設置消息的下標* @author lenovo**/ public class Message implements Serializable{private 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 getContent() {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的連接池設置

    package com.redis.util;import java.util.List; import java.util.Map; import java.util.Set;import 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 jedisPool;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);//20config.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, 60000);}/*** 獲取數據* @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;}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.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對象jedisPool.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(jedis);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 {//返還到連接池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 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.hget(key, field);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}return value;}public static void hdel(byte[] key, byte[] field) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.hdel(key, field);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}}/*** 存儲REDIS隊列 順序存儲* @param byte[] key reids鍵名* @param byte[] value 鍵值*/public static void lpush(byte[] key, byte[] value) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.lpush(key, value);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}}/*** 存儲REDIS隊列 反向存儲* @param byte[] key reids鍵名* @param byte[] value 鍵值*/public static void rpush(byte[] key, byte[] value) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.rpush(key, value);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}}/*** 將列表 source 中的最后一個元素(尾元素)彈出,并返回給客戶端* @param byte[] key reids鍵名* @param byte[] value 鍵值*/public static void rpoplpush(byte[] key, byte[] destination) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.rpoplpush(key, destination);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}}/*** 獲取隊列數據* @param byte[] key 鍵名* @return*/public static List<byte[]> lpopList(byte[] key) {List<byte[]> list = null;Jedis jedis = null;try {jedis = jedisPool.getResource();list = jedis.lrange(key, 0, -1);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}return list;}/*** 獲取隊列數據* @param byte[] key 鍵名* @return*/public static byte[] rpop(byte[] key) {byte[] bytes = null;Jedis jedis = null;try {jedis = jedisPool.getResource();bytes = jedis.rpop(key);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}return bytes;}public static void hmset(Object key, Map<String, String> hash) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.hmset(key.toString(), hash);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}}public static void hmset(Object key, Map<String, String> hash, int time) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.hmset(key.toString(), hash);jedis.expire(key.toString(), time);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}}public static List<String> hmget(Object key, String... fields) {List<String> result = null;Jedis jedis = null;try {jedis = jedisPool.getResource();result = jedis.hmget(key.toString(), fields);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}return result;}public static Set<String> hkeys(String key) {Set<String> result = null;Jedis jedis = null;try {jedis = jedisPool.getResource();result = jedis.hkeys(key);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}return result;}public static List<byte[]> lrange(byte[] key, int from, int to) {List<byte[]> result = null;Jedis jedis = null;try {jedis = jedisPool.getResource();result = jedis.lrange(key, from, to);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}return result;}public static Map<byte[], byte[]> hgetAll(byte[] key) {Map<byte[], byte[]> result = null;Jedis jedis = null;try {jedis = jedisPool.getResource();result = jedis.hgetAll(key);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}return result;}public static void del(byte[] key) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.del(key);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}}public static long llen(byte[] key) {long len = 0;Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.llen(key);} catch (Exception e) {//釋放redis對象jedisPool.returnBrokenResource(jedis);e.printStackTrace();} finally {//返還到連接池close(jedis);}return len;}}

    Configuration主要用于讀取redis配置信息

    package com.redis.util;import java.io.IOException; import java.io.InputStream; import java.util.Properties;public class Configuration extends Properties {private static final long serialVersionUID = 50440463580273222L;private static Configuration instance = null;public static synchronized Configuration getInstance() {if (instance == null) {instance = new Configuration();}return instance;}public String getProperty(String key, String defaultValue) {String val = getProperty(key);return (val == null || val.isEmpty()) ? defaultValue : val;}public String getString(String name, String defaultValue) {return this.getProperty(name, defaultValue);}public int getInt(String name, int defaultValue) {String val = this.getProperty(name);return (val == null || val.isEmpty()) ? defaultValue : Integer.parseInt(val);}public long getLong(String name, long defaultValue) {String val = this.getProperty(name);return (val == null || val.isEmpty()) ? defaultValue : Integer.parseInt(val);}public float getFloat(String name, float defaultValue) {String val = this.getProperty(name);return (val == null || val.isEmpty()) ? defaultValue : Float.parseFloat(val);}public double getDouble(String name, double defaultValue) {String val = this.getProperty(name);return (val == null || val.isEmpty()) ? defaultValue : Double.parseDouble(val);}public byte getByte(String name, byte defaultValue) {String val = this.getProperty(name);return (val == null || val.isEmpty()) ? defaultValue : Byte.parseByte(val);}public Configuration() {InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream("config.xml");try {this.loadFromXML(in);in.close();} catch (IOException e) {}} }


    測試redis隊列

    package com.quene.test;import com.bean.Message; import com.bean.util.ObjectUtil; import com.redis.util.JedisUtil;public class TestRedisQuene {public static byte[] redisKey = "key".getBytes();static{init();}public static void main(String[] args) {pop();}private static void pop() {byte[] bytes = JedisUtil.rpop(redisKey);Message msg = (Message) ObjectUtil.bytesToObject(bytes);if(msg != null){System.out.println(msg.getId()+" "+msg.getContent());}}private static void init() {Message msg1 = new Message(1, "內容1");JedisUtil.lpush(redisKey, ObjectUtil.objectToBytes(msg1));Message msg2 = new Message(2, "內容2");JedisUtil.lpush(redisKey, ObjectUtil.objectToBytes(msg2));Message msg3 = new Message(3, "內容3");JedisUtil.lpush(redisKey, ObjectUtil.objectToBytes(msg3));}} 測試結果如下: 1?? 內容1 2?? 內容2

    3?? 內容3

    轉自http://www.itnose.net/detail/6284422.html

轉載于:https://www.cnblogs.com/yewg/p/5586216.html

總結

以上是生活随笔為你收集整理的(转)java redis使用之利用jedis实现redis消息队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧洲精品一区二区 | 五十路在线 | 538国产视频| 在线免费观看亚洲 | 黄色动漫软件 | 久久精品国产一区二区 | 男人日女人逼 | 中文字幕第一区 | 日本在线视频免费 | 免费看成人av| 少妇福利在线 | 亚洲av无码电影在线播放 | 久久综合九色综合欧美狠狠 | 亚洲精品视频免费在线观看 | 国产精品免费电影 | 中文字幕日韩精品亚洲一区小树林 | 激情综合啪啪 | 欧美激情精品久久久久久蜜臀 | 国产偷人爽久久久久久老妇app | 老司机一区二区三区 | 精品无码久久久久久久久成人 | 亚洲色图在线观看视频 | 91黄色看片 | 久久久久国产精品一区二区 | 中文字幕人妻一区二区 | 日韩无砖 | 色骚综合 | 午夜88| 希岛婚前侵犯中文字幕在线 | 成人久久精品 | 9l视频自拍蝌蚪9l视频 | 精品小视频在线观看 | 国产精品精品 | 久久香蕉热 | 农村妇女毛片 | 女18毛片| 成人在线不卡视频 | 极品尤物魔鬼身材啪啪仙踪林 | 国产精品视频在 | 91这里只有精品 | 国产午夜麻豆影院在线观看 | 各种含道具高h调教1v1男男 | 国产精品欧美精品 | 手机看片一区二区 | 啪啪福利社 | 久久久久视| 国产欧美又粗又猛又爽 | 91theporn国产在线观看 | 色涩涩 | 中文字幕有码av | 911国产| 三级男人添奶爽爽爽视频 | 色婷av| 微拍福利一区二区 | 日韩性生活视频 | 九热在线视频 | 欧美日韩在线第一页 | 国产特黄级aaaaa片免 | gogo亚洲国模私拍人体 | 亚洲最大成人在线视频 | 国产伦精品一区二区三区照片 | 少妇久久久久久久久久 | 美女网站免费 | 亚洲美女黄色片 | 一级黄色免费观看 | 亚洲综合网av | 黄网在线免费观看 | 久久久久久久久久久福利 | 国产精品高潮呻吟视频 | 亚洲综合免费观看高清完整版 | 亚洲成肉网 | 国产黄色录像片 | 国产剧情一区在线 | 欧美日韩精品在线观看 | 性少妇mdms丰满hdfilm | 在线一级 | 中国妇女做爰视频 | 亚洲国产精品毛片 | 91在线视频网址 | 最新理伦片eeuss影院 | 少妇一级淫片免费视频 | 亚洲咪咪 | 中文亚洲字幕 | 欧美日本中文字幕 | 精品九九九九 | 亚洲wwww| 国产精品丝袜黑色高跟 | 午夜一区二区三区 | 天堂av网址 | 国产在线导航 | 久久国产小视频 | 亚洲精品久久久久久动漫器材一区 | 特级a毛片 | 欧美第一色 | 日韩免费在线视频观看 | 69av视频在线 | 中文字幕av无码一区二区三区 | 欧美在线综合 | 亚洲人一区 |