会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 一篇学会 C# Redis list 当作队列使用!

一篇学会 C# Redis list 当作队列使用

时间:2025-11-05 04:23:15 来源:益强数据堂 作者:IT科技 阅读:489次

本文转载自微信公众号「后端Q」,篇学作者conan  。作队转载本文请联系后端Q公众号。列使

Redis的篇学列表经常被用作队列,用于在不同程序之间有序地交换消息。作队一个客户端通过 LPUSH 命令将消息放入队列中,列使而另一个客户端通过 RPOP 或者 BRPOP 命令取出队列中等待时间最长的篇学消息。

对于c# 方法

using (var redisClent = RedisManager.GetClient())                         {                             while (true)                             {                                 if ((DateTime.Now - date).TotalSeconds > maxSeconds)                                     break;                                 var infoJson = redisClent.DequeueItemFromList(CacheKeys.UploadLoginTimeQueue);                                 if (string.IsNullOrWhiteSpace(infoJson) || string.IsNullOrEmpty(infoJson))                                     break;                                 var info = JsonConvert.DeserializeObject<LoginTimeUpdate>(infoJson);                                 UpdateLoginTime(info);                             }                         }  client = RedisManager.GetClient();                 if (!client.Get<bool>(key))                 {                     client.Set(key,作队 true, DateTime.Now.Date.AddDays(1).AddSeconds(-1));                 }                 var jsonObj = JsonConvert.SerializeObject(info);                 client.EnqueueItemOnList(CacheKeys.UploadLoginTimeQueue, jsonObj); 

命令

redis 127.0.0.1:6379> LPUSH runoobkey redis (integer) 1 redis 127.0.0.1:6379> LPUSH runoobkey mongodb (integer) 2 redis 127.0.0.1:6379> LPUSH runoobkey mysql (integer) 3 redis 127.0.0.1:6379> LRANGE runoobkey 0 10 1) "mysql" 2) "mongodb" 3) "redis" 

问题,上面的列使队列方法是b2b信息网『不安全』的,因为在这个过程中,篇学一个客户端可能在取出一个消息之后崩溃,作队而未处理完的列使消息也就因此丢失。

使用 RPOPLPUSH 命令(或者它的篇学阻塞版本 BRPOPLPUSH )可以解决这个问题:因为它不仅返回一个消息,同时还将这个消息添加到另一个备份列表当中,作队如果一切正常的列使话,服务器托管当一个客户端完成某个消息的处理之后,可以用 LREM 命令将这个消息从备份表删除。

最后,还可以添加一个客户端专门用于监视备份表,它自动地将超过一定处理时限的消息重新放入队列中去(负责处理该消息的客户端可能已经崩溃),这样就不会丢失任何消息了。

(责任编辑:IT科技)

推荐内容
  • 电脑QQ时钟错误的原因和解决方法(探究电脑QQ时钟错误的根源,以及如何解决这一问题)
  • 三步安装完成nginx负载均衡设置
  • 聊聊Redis集群有哪些种类?
  • 纳尼?MySQL 中 count(*) 比 count(1) 快?
  • 如何使用魅蓝备份恢复出厂设置(简单操作教程帮您轻松恢复手机出厂设置)
  • 开机显示Grub错误的解决方法