redis PHP實現的乙個優先順序去重佇列

2022-06-09 19:00:08 字數 1198 閱讀 8661

主要思路是用乙個set做前端去重緩衝, 若干個list做後端的多優先順序訊息佇列, 用乙個程序來進行分發, 即從set中分發訊息到佇列.

set緩衝的設計為當天有效, 所以有個零點問題,有可能在零點前set中剛放進去的訊息沒有分發即失效, 這一點可以用另乙個程序彌補處理前一天的遺留訊息和刪除前一天的緩衝

<?php

/**

* @author

* */class

msgquery

return self::$instance

; }

/*** 新增訊息到訊息緩衝區

* @param int $score 優先順序(1-5)

* @param string $msg 訊息

*/public

function add($score, $msg

)

if ($score > self::$max_score

)

$cachekey = self::key_cache_prefix . date ( 'ymd');

$cachedata = array

( 'score' => $score,

'msg' => $msg

);

$this->redis->sadd ( $cachekey, serialize ( $cachedata

) );

}/**

* 將訊息從緩衝區移動到相應的優先順序佇列中

*/public

function

movetoquery()

unset($cacheddata

); }

/*** 從佇列阻塞式出棧乙個最高優先順序訊息

* @return string msg

*/public

function

bpop()

$msg = $this->redis->blpop($querykeys, 0);

return

$msg[1];

}private

function __construct($redis

)

private

function

__destruct()

}?>

乙個寫優先的讀寫鎖實現

g wall o rwlock rwlock.cpp lpthread 乙個寫優先讀寫鎖的實現,多執行緒頻繁讀,多執行緒少量寫,同時寫優先,效能極佳。當寫鎖 獨佔鎖 lock成功的必要條件是 1.將寫鎖計數 2.會阻塞後續對讀鎖 共享鎖 的讀 3.等待讀鎖的計數為0 4.等待寫鎖的計數為1 incl...

堆的乙個實現 利用優先佇列

include includeusing namespace std 構造方法,每次從最小堆中取出權值最小的兩個節點,新的雙親節點權值為兩個之和,再放入堆中 當只剩下乙個節點時即為根節點,樹中所有中間節點的權值和為總的路徑 priority queue,greater q 宣告為小頂堆,vector...

實現乙個優先順序佇列

怎樣實現乙個按優先順序排序的佇列?並且在這個佇列上面每次 pop 操作總是返回優先順序最高的那個元素 下面的類利用 heapq 模組實現了乙個簡單的優先順序佇列 import heapq class priorityqueue def init self self.queue self.index ...