C# 使用 CSRedis 来操作 Redis 队列

发布于:2025-02-20 ⋅ 阅读:(29) ⋅ 点赞:(0)

Demo代码

public class HomeController : Controller
{
    [HttpGet("index")]
    public async Task Index()
    {
        var csredis = new CSRedis.CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=1");
        RedisHelper.Initialization(csredis);

        var queueKey = "queue_task_test"; // 定义队列的 key

        //在列表中添加一个或多个值
        RedisHelper.RPush("queue_task_test", new { id = 1, name = "no.1" });
        RedisHelper.RPush("queue_task_test", new { id = 2, name = "no.2" });
        RedisHelper.RPush("queue_task_test", new { id = 3, name = "no.3" });
        RedisHelper.RPush("queue_task_test", new { id = 4, name = "no.4" });
        RedisHelper.RPush("queue_task_test", new { id = 5, name = "no.5" });

        //移出并获取列表的第一个元素
        Console.WriteLine(RedisHelper.LPop("queue_task_test"));
        Console.WriteLine(RedisHelper.LPop("queue_task_test"));
        Console.WriteLine(RedisHelper.LPop("queue_task_test"));
        Console.WriteLine(RedisHelper.LPop("queue_task_test"));
        Console.WriteLine(RedisHelper.LPop("queue_task_test"));
    }
}

分析

在 Redis 中,RPushLPop 分别是用于操作列表(List)数据结构的命令。

RPush(Right Push)

RPush 用于将一个或多个元素添加到列表的右端。也就是将元素插入到列表的末尾。你可以向一个 Redis 列表中推送多个元素,Redis 会将它们按顺序依次添加到列表的末尾。

在代码中,RedisHelper.RPush("queue_task_test", new { id = 1, name = "no.1" }) 这行代码将一个新的对象 { id = 1, name = "no.1" } 添加到 queue_task_test 列表的末尾。

LPop(Left Pop)

LPop 用于从列表的左端(即列表的头部)移除并返回第一个元素。当你调用 LPop 时,Redis 会移除列表的第一个元素并返回该元素的值。调用 LPop 会导致列表的大小减小,并且元素顺序会发生变化。

在代码中,Console.WriteLine(RedisHelper.LPop("queue_task_test")) 会从 queue_task_test 列表的左端(头部)移除第一个元素并打印出来。每次调用 LPop,都会移除列表中的第一个元素,直到列表为空。

总结

  • RPush 向列表的右端添加元素。
  • LPop 从列表的左端移除并返回第一个元素。

因此,代码的执行顺序会将元素按照添加的顺序从右端插入,而通过 LPop 移除时,会按添加顺序的相反顺序(先入先出,FIFO)进行移除。

知识点

FIFO(First In, First Out) 是一种数据结构的访问方式,意思是 先入先出。这意味着最早进入数据结构的元素会最先被处理或移除。