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 中,RPush
和 LPop
分别是用于操作列表(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) 是一种数据结构的访问方式,意思是 先入先出。这意味着最早进入数据结构的元素会最先被处理或移除。