redis實現有序的訊息佇列

2022-11-30 23:21:04 字數 1423 閱讀 8426

redis是什麼東西就不多說了,網上文章一搜一大堆。

首先來說一下我要實現的功能:

類似乙個訊息中轉站吧,如果有人要傳送訊息,先將訊息發到我這裡來,然後我這邊進行**,為的就是有乙個統一的管理和修改時方便,

而且所有的訊息有優先順序,也會有定時傳送(如果同一時間訊息過多,則會有延遲)

思路:首先乙個是將這兩個分為兩個佇列來實現, 乙個用來實現訊息優先順序,乙個來實現定時傳送

用的是redis的有序集合,用zadd新增時,將score比做是優先順序,也可以用時間戳來當做score,用來表示時間

php 版本簡易實現

將訊息加入優先順序的佇列,將1,2替換為時間就是定時傳送的佇列了

1 $redis = new redis();

2 $redis->connect('127.0.0.1', 6379);

3 $redis->zadd('zset1', 1, 'message');

4 $redis->zadd('zset1', 2, 'message2');

從佇列中取出資料

1 $redis->zrevrangebyscore('zset1, '+inf', '-inf', array('withscores'=>false, 'limit'=>array(0,20)));

這條語句表示從zset1這個佇列裡按照score從最大(+inf)到最小(-inf)的排序中取出20條,不帶score,如果想要從小到大可以用 zrangebyscore

如果你想讓這些都執行在命令列下,可以參考下面來,當然這些是經過刪減的

1 <?php

2 while (true) {

3pid = pcntl_fork();

4 if ($pid == -1) {

5echo date('y-m-d h:i:s') . "fork失敗!\n";

6else if ($pid == 0) {

7redis = new redis();

8redis->connect('127.0.0.1', 6379);

9redis->zrevrangebyscore('zset1', '+inf', '-inf', array('withscores'=>false, 'limit'=>array(0,20)));

10exit;

11else {

12pcntl_wait($status);

1314

pcntl_fork是php中的生成子程序,當呼叫該函式時,會返回乙個程序pid,當pid為0時表明是在子程序中,所以把要執行的東西全放這裡

線上的乙個專案,執行幾個月了,用子程序方式還沒有出過問題,也沒掛過,相當不錯

ps:好長時間不寫部落格了,我感覺好難寫啊,以後要堅持每週都要寫至少一篇,而且不能是以前那種湊數的

-eof-

標籤:redis,佇列,有序佇列

實現有效教學的基本要求

如何提高課堂教學的有效性是我們研究的課題之一,要實現課堂教學的有效性,我想作為一名教師應該做到以下幾點 一 精心了解學生 學情,就是學生自身一切因素的總和。它包括學生的知識經驗 心理特點 成長規律 行為方式 思維方法 生活習慣 興趣愛好 困難疑惑 情感渴盼 心路歷程等諸多方面。學情是教師選擇和優化教...

實現有效課堂教學的幾點看法

如何實現數學有效課堂教學 山東省博興縣純化鎮純化完小鄭娜張玉岐 郵編 256507 聯絡 0543 2530392 說起有效性,對於參加素質教育改革的教師來說,是個常談的話題。有效即有效益 效率高 效果好,而課堂教學中的有效性既考慮教師教的有效行為,又考慮學生學的有效行為。下面,我就自身的理解談一談...

發揮學生的主體作用,實現有效教學

作者 謝林立 課程教育研究 上 2014年第06期 摘要 本文從樹立以學生為主體的新型教育理念 創設教學情景 採用 互助互動合作 式的教學組織形式 鼓勵學生質疑問難四個方面對如何發揮學生的主體作用,實現有效教學進行了闡述。關鍵詞 發揮主體作用有效教學 中圖分類號 g633.91 文獻標識碼 a 文章...