redis佇列 生產消費模式 簡單實現

2021-08-15 16:29:08 字數 3875 閱讀 1151

生產消費,不外乎就是生產新的訊息插入到佇列尾巴,消費者從佇列頭部取訊息。

基於此,簡單實現如下:(還有一種稍微複雜的實現,是結合了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...