生產消費,不外乎就是生產新的訊息插入到佇列尾巴,消費者從佇列頭部取訊息。
基於此,簡單實現如下:(還有一種稍微複雜的實現,是結合了spring的實現,複雜實現)
/**
* 往列表尾部插入資料
* * @param key
* @param value
*/public static void rpush(string key, string value)
}
import org.slf4j.logger;
import org.slf4j.logge***ctory;
import redis.clients.jedis.jedis;
public class redisconsumer implements runnable
@override
public void run() ",msg);
//業務邏輯處理
...errortimes = 0;
}catch (exception e)
try catch (interruptedexception e1)
logger.warn("消費者異常",e);}}
}}
}
import redis.clients.jedis.jedis;
public class jedisutil
/*** 設定有效期的字串快取
* * @param key
* @param value
* @param seconds
*/public static void set(string key, string value, int seconds)
}/**
* 設定字串快取
* * @param key
* @param value
*/public static void set(string key, string value)
}/**
* 設定byte快取
* * @param key
* @param value
*/public static void setbyte(byte key, byte value,int expire)
}/**
* 設定有效期的字串快取
* * @param key
* @param value
* @param seconds
*/public static void setex(string key, int seconds, string value)
}/**
* 獲取字串資料
* * @param key
* @return
*/public static string get(string key)
}/**
* 獲取byte資料
* * @param key
* @return
*/public static byte getbyte(byte key)
}/**
* 往列表頭部插入資料
* * @param key
* @param value
*/public static void lpush(string key, string value)
}/**
* 往列表尾部插入資料
* * @param key
* @param value
*/public static void rpush(string key, string value)
}/**
* 從列表頭部獲取資料
* * @param key
* @return
*/public static string lpop(string key)
}/**
* 從列表尾部獲取資料
* * @param key
* @return
*/public static string rpop(string key)
}/**
* 獲取列表長度
* * @param key
* @return 列表長度,若返回-1則表示取值發生異常
*/public static long llen(string key)
}/**
* 計數器遞增
* @param key
* @return 執行 incr 命令之後 key 的值
*/public static long incr(string key)
}/**
* 計數器遞減
* @param key
* @return 執行 decr 命令之後 key 的值
*/public static long decr(string key)
}/**
* 刪除鍵
* @param key
* @return 執行 decr 命令之後 key 的值
*/public static long delbyte(byte key)
}/**
* 設定key有效期
* @param key
* @param seconds
*/public static void expire(string key,int seconds)
}public static void expirebyteskey(byte key, int expire)
}/**
* 判斷member是否是集合key的成員
* @param key
* @param member
* @return
*/public static boolean sismember(string key, string member)
}/**
* 往集合set新增資料
* @param key
* @param member
*/public static void sadd(string key,string member)
}/**
* 獲取鍵的剩餘有效秒數
* 當 key 不存在時,返回 -2 。 當 key 存在但沒有設定剩餘生存時間時,返回 -1 。 否則,以毫秒為單位,返回 key 的剩餘生存時間
* 注意:在 redis 2.8 以前,當 key 不存在,或者 key 沒有設定剩餘生存時間時,命令都返回 -1
* @param key
*/public static long pttl(string key)
}/**
* 刪除鍵
* @param key
*/public static void del(string key)
}/**
* 獲取list第n個值
* @param key
*/public static string lindex(string key,long index)
}}
new thread(new redisconsumer(msgprocessor, msgconstant.redis_queue_key)).start();
logger.info("第乙個消費者啟動完成");
new thread(new redisconsumer(msgprocessor,msgconstant.redis_queue_key)).start();
logger.info("第二個消費者啟動完成");
lpop:非阻塞式從redis訊息佇列頭部取出訊息。 生產消費模式
package com.phone.week5.day3 有乙個倉庫放字元的,它有乙個生產字元的方法,也有乙個拿字元的方法 倉庫裡只能有乙個字元 有乙個生產者,可以呼叫倉庫裡生產字元的方法 有乙個消費者,可以呼叫倉庫裡拿字元的方法 兩個人不能同時生產或拿 1.建立乙個共享資源類 2.建立生產者 3....
生產消費模式
生產者producer 生產某個物件 共享資源 放在緩衝池中,然後消費者從緩衝池中取出這個物件。也就是生產者生產乙個,消費者取出乙個。這樣進行迴圈。生產者 class producer implements runnable override public void run catch interr...
Redis 消費模式
1.1.1 生產消費模式 佇列模式 案例生產包子,消費者消費先消費最新生產的 1 127.0.0.1 6379 lpush bao bao1 2 integer 1 3127.0.0.1 6379 lpush bao bao2 4 integer 2 5127.0.0.1 6379 lpush ba...