自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇學(xué)會(huì) C# Redis list 當(dāng)作隊(duì)列使用

開(kāi)發(fā) 后端 Redis
Redis的列表經(jīng)常被用作隊(duì)列,用于在不同程序之間有序地交換消息。一個(gè)客戶端通過(guò) LPUSH 命令將消息放入隊(duì)列中,而另一個(gè)客戶端通過(guò) RPOP 或者 BRPOP 命令取出隊(duì)列中等待時(shí)間最長(zhǎng)的消息。

[[434139]]

本文轉(zhuǎn)載自微信公眾號(hào)「后端Q」,作者conan  。轉(zhuǎn)載本文請(qǐng)聯(lián)系后端Q公眾號(hào)。

Redis的列表經(jīng)常被用作隊(duì)列,用于在不同程序之間有序地交換消息。一個(gè)客戶端通過(guò) LPUSH 命令將消息放入隊(duì)列中,而另一個(gè)客戶端通過(guò) RPOP 或者 BRPOP 命令取出隊(duì)列中等待時(shí)間最長(zhǎng)的消息。

對(duì)于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" 

問(wèn)題,上面的隊(duì)列方法是『不安全』的,因?yàn)樵谶@個(gè)過(guò)程中,一個(gè)客戶端可能在取出一個(gè)消息之后崩潰,而未處理完的消息也就因此丟失。

使用 RPOPLPUSH 命令(或者它的阻塞版本 BRPOPLPUSH )可以解決這個(gè)問(wèn)題:因?yàn)樗粌H返回一個(gè)消息,同時(shí)還將這個(gè)消息添加到另一個(gè)備份列表當(dāng)中,如果一切正常的話,當(dāng)一個(gè)客戶端完成某個(gè)消息的處理之后,可以用 LREM 命令將這個(gè)消息從備份表刪除。

 

最后,還可以添加一個(gè)客戶端專門(mén)用于監(jiān)視備份表,它自動(dòng)地將超過(guò)一定處理時(shí)限的消息重新放入隊(duì)列中去(負(fù)責(zé)處理該消息的客戶端可能已經(jīng)崩潰),這樣就不會(huì)丟失任何消息了。

 

責(zé)任編輯:武曉燕 來(lái)源: 后端Q
相關(guān)推薦

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數(shù)據(jù)ByteBuffer

2023-11-29 13:59:00

trait定義接口

2022-01-01 20:02:25

Metadata動(dòng)態(tài)元數(shù)據(jù)

2021-10-15 09:55:48

Myloader數(shù)據(jù)教程

2021-07-02 08:51:29

源碼參數(shù)Thread

2021-07-16 22:43:10

Go并發(fā)Golang

2021-09-28 08:59:30

復(fù)原IP地址

2022-04-12 08:30:52

回調(diào)函數(shù)代碼調(diào)試

2022-10-20 07:39:26

2021-10-27 09:59:35

存儲(chǔ)

2022-03-11 10:21:30

IO系統(tǒng)日志

2023-03-13 21:38:08

TCP數(shù)據(jù)IP地址

2021-10-29 07:35:32

Linux 命令系統(tǒng)

2021-10-14 10:22:19

逃逸JVM性能

2023-11-01 09:07:01

Spring裝配源碼

2022-11-14 08:17:56

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)