亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

flask - web消息通知中,如何用輪詢redis來代替輪詢數據庫?

瀏覽:72日期:2023-08-24 15:17:57

問題描述

我想在自己的flask應用中實現簡單的消息通知功能,例如管理員向全體用戶發公告,或者想某個用戶發出提醒等功能。

可是在實現過程中遇到了一個難題,情況具體描述如下:

我使用sse機制來使服務器向客戶端發送消息,可是這里出現了問題,就是發送消息的模塊并不知道什么時候應該發送消息,例如當用戶A評論了用戶B的博客時,這時就需要通知用戶B,我們此時需要通知發送模塊:“你該向B發送消息了”,如何通知發送模塊呢?

我想到的就是輪詢數據庫,但是感覺這樣太考驗服務器的抗壓了,百度到說:每當對應的數據表更新,就產生一個消息到Redis中,然后輪詢Redis。

這樣聽起來挺好,可是在實現中遇到了很多問題:

例如:(1)redis是key-value存儲,當管理員既要給A發消息,又要給B,C等發消息,此時用key該如何區分?

(2)假設現在要給用戶B發消息,那么會產生對應的消息存儲在redis中,如果此刻 用戶B并未登錄呢,難道用戶B一周不登錄,該消息就會在redis中一周嗎? 【我對redis不太了解,知道是在緩存中存儲,所以感覺不可能在緩存中能存儲一周】

思考兩三天了,望各位前輩能夠指點一二

問題解答

回答1:

redis pub/sub 訂閱/推送 ,是否考慮過使用這樣或者更高級的消息隊列中間件呢。

基本邏輯是這樣的,消息是需要緩存在數據庫或者其他nosql的。拆分出消息中心,使用redis的pub/sub體系或者list,其他需要發送消息的通過redis通知消息中心發送消息。消息中心檢查用戶是否在線,在線直接發送消息給用戶(通過websocket之類的,sse也可以),并標記已讀用戶在線是拉取全部未讀消息無論在不在線消息都要入庫。。。由于redis的value是字符串,要區分用戶,你只要、value是個json字符串就好了。

{ 'target':['a','b'], 'message':'我是要發送給用戶a和b的消息'}回答2:

key 放消息類型value放業務數據,比如序列化以后的dict,想要什么放什么,放多少都行,到時候取出來反序列化就可以直接用了

標簽: web
主站蜘蛛池模板: 午夜怡红院| 中文字幕亚洲一区 | 亚洲欧美日本人成在线观看 | 美女被免费网站视频软件 | 久久精品国产一区二区 | 一区二区三区国产美女在线播放 | 最近手机中文字幕1 | 99久久香蕉国产综合影院 | 在线亚洲一区二区 | 久久99国产亚洲精品 | 久久久免费精品 | 久久精品视频在线观看榴莲视频 | 精品一区二区三区的国产在线观看 | 日韩一区二区免费看 | 成人午夜大片 | 欧美性精品hd在线观看 | 在线看毛片网站 | 免费看欧美毛片大片免费看 | 亚洲精品三区 | 极品美女写真菠萝蜜视频 | 免费视频日本 | 成人国产精品免费视频 | 成人欧美精品久久久久影院 | 男人的天堂在线观看入口 | 国产成人精品天堂 | 国产成a人片在线观看视频 国产成版人视频网站免费下 | 女人十八一级毛片 | 精品一区二区三区高清免费不卡 | 久久久久18 | 日本黄色大片在线播放视频免费观看 | 久久国产精品自线拍免费 | 精品国产欧美一区二区五十路 | 欧美在线小视频 | 欧美88| 99视频在线精品 | 欧美高清在线 | 欧美18毛片免费看 | 国产一二三区在线 | 国产一区二区三区在线观看视频 | 2021精品国产品免费观看 | 午夜香蕉成视频人网站高清版 |