文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-02 17:18

关注

本文转载自微信公众号「后端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(infoJson); 
  12.                                 UpdateLoginTime(info); 
  13.                             } 
  14.                         } 
  1. client = RedisManager.GetClient(); 
  2.                 if (!client.Get(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内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯