成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇學會 C# Redis list 當作隊列使用

開發 后端 Redis
Redis的列表經常被用作隊列,用于在不同程序之間有序地交換消息。一個客戶端通過 LPUSH 命令將消息放入隊列中,而另一個客戶端通過 RPOP 或者 BRPOP 命令取出隊列中等待時間最長的消息。

[[434139]]

本文轉載自微信公眾號「后端Q」,作者conan  。轉載本文請聯系后端Q公眾號。

Redis的列表經常被用作隊列,用于在不同程序之間有序地交換消息。一個客戶端通過 LPUSH 命令將消息放入隊列中,而另一個客戶端通過 RPOP 或者 BRPOP 命令取出隊列中等待時間最長的消息。

對于c# 方法

  1. using (var redisClent = RedisManager.GetClient()) 
  2.                         { 
  3.                             while (true
  4.                             { 
  5.                                 if ((DateTime.Now - date).TotalSeconds > maxSeconds) 
  6.                                     break; 
  7.  
  8.                                 var infoJson = redisClent.DequeueItemFromList(CacheKeys.UploadLoginTimeQueue); 
  9.                                 if (string.IsNullOrWhiteSpace(infoJson) || string.IsNullOrEmpty(infoJson)) 
  10.                                     break; 
  11.                                 var info = JsonConvert.DeserializeObject<LoginTimeUpdate>(infoJson); 
  12.                                 UpdateLoginTime(info); 
  13.                             } 
  14.                         } 
  1. client = RedisManager.GetClient(); 
  2.                 if (!client.Get<bool>(key)) 
  3.                 { 
  4.                     client.Set(keytrue, DateTime.Now.Date.AddDays(1).AddSeconds(-1)); 
  5.                 } 
  6.  
  7.                 var jsonObj = JsonConvert.SerializeObject(info); 
  8.                 client.EnqueueItemOnList(CacheKeys.UploadLoginTimeQueue, jsonObj); 

命令

  1. redis 127.0.0.1:6379> LPUSH runoobkey redis 
  2. (integer) 1 
  3. redis 127.0.0.1:6379> LPUSH runoobkey mongodb 
  4. (integer) 2 
  5. redis 127.0.0.1:6379> LPUSH runoobkey mysql 
  6. (integer) 3 
  7. redis 127.0.0.1:6379> LRANGE runoobkey 0 10 
  8.  
  9. 1) "mysql" 
  10. 2) "mongodb" 
  11. 3) "redis" 

問題,上面的隊列方法是『不安全』的,因為在這個過程中,一個客戶端可能在取出一個消息之后崩潰,而未處理完的消息也就因此丟失。

使用 RPOPLPUSH 命令(或者它的阻塞版本 BRPOPLPUSH )可以解決這個問題:因為它不僅返回一個消息,同時還將這個消息添加到另一個備份列表當中,如果一切正常的話,當一個客戶端完成某個消息的處理之后,可以用 LREM 命令將這個消息從備份表刪除。

 

最后,還可以添加一個客戶端專門用于監視備份表,它自動地將超過一定處理時限的消息重新放入隊列中去(負責處理該消息的客戶端可能已經崩潰),這樣就不會丟失任何消息了。

 

責任編輯:武曉燕 來源: 后端Q
相關推薦

2021-12-09 07:13:25

C#集合類型

2022-01-02 08:43:46

Python

2022-02-07 11:01:23

ZooKeeper

2021-12-28 07:20:43

Hippo WebAssembly云原生

2022-01-12 07:36:01

Java數據ByteBuffer

2021-07-02 09:45:29

MySQL InnoDB數據

2021-07-06 08:59:18

抽象工廠模式

2023-01-03 08:31:54

Spring讀取器配置

2021-07-05 22:11:38

MySQL體系架構

2021-05-11 08:54:59

建造者模式設計

2022-08-26 09:29:01

Kubernetes策略Master

2022-08-23 08:00:59

磁盤性能網絡

2023-11-28 08:29:31

Rust內存布局

2023-11-29 13:59:00

trait定義接口

2022-01-01 20:02:25

Metadata動態元數據

2021-09-28 08:59:30

復原IP地址

2021-10-14 10:22:19

逃逸JVM性能

2022-04-12 08:30:52

回調函數代碼調試

2021-10-27 09:59:35

存儲

2021-07-16 22:43:10

Go并發Golang
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产www在线| 日韩在线国产精品 | 91精品国产综合久久久久久丝袜 | 中文字幕日韩欧美 | 欧美爱爱视频网站 | 涩爱av一区二区三区 | 日韩久久久久久 | 中文字幕av网 | 欧美日本亚洲 | 亚洲精品在线视频 | 激情视频网站 | www.婷婷| 九九久久久 | 久久久久亚洲精品 | 欧美不卡视频 | 亚洲综合二区 | 青青久久av北条麻妃海外网 | 久久丝袜 | 久久激情网 | 久久在线视频 | 日本黄色影片在线观看 | 国产亚洲成av人在线观看导航 | 污片在线免费观看 | 91精品国产高清久久久久久久久 | 国产一区不卡 | av网站免费| 97av视频在线 | 亚洲男女激情 | 成人欧美日韩一区二区三区 | 国产精品日韩 | 日韩在线一区二区 | 免费一级片 | 久久久久国产精品一区二区 | 蜜桃免费一区二区三区 | 亚洲毛片在线观看 | 久久精品国产久精国产 | 国产一区二区毛片 | 亚洲精品乱码久久久久久黑人 | 亚洲天堂中文字幕 | av激情在线 | 高清成人免费视频 |