一、List列表概述
Redis列表是简单的字符串列表,按照插入顺序排序。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
二、使用场景
链表的应用广泛,在获取最新的数据的场景比较多,如粉丝的关注列表、我的收藏列表、最新消息列表、排行榜、有时间轴的数据、微博的评论系统、消息传递、并行转串行、消息队列、记录日志等。
三、.NET 操作
1、顺序添加
string listid = "kgxk_list";
var litaibai = new UserInfo() { Id = 1, Name = "李太白" };
client.AddItemToList(listid, JsonConvert.SerializeObject(litaibai));
var jiaxu = new UserInfo() { Id = 2, Name = "贾诩" };
client.AddItemToList(listid, JsonConvert.SerializeObject(jiaxu));
2、在list最后一位追加值
var liubei = new UserInfo() { Id = 1, Name = "刘备" };
client.PushItemToList(listid, JsonConvert.SerializeObject(liubei));
3、设置过期时间
string listid = "kgxk_list";
var litaibai = new UserInfo() { Id = 1, Name = "李太白" };
client.AddItemToList(listid, JsonConvert.SerializeObject(litaibai));
var liubei = new UserInfo() { Id = 2, Name = "刘备" };
client.PushItemToList(listid, JsonConvert.SerializeObject(liubei));
//只在内存中存储一秒
client.ExpireEntryAt(listid, DateTime.Now.AddSeconds(1));
Console.WriteLine(client.GetListCount(listid));
Task.Delay(1 * 1000).Wait();
Console.WriteLine("1秒之后");
Console.WriteLine(client.GetListCount(listid));
//雪崩 问题:瞬间大量的数据消失-》大量的数据不要一下的全部消失
4、设置过期时间 插队(排到第一位)
var litaibai = new UserInfo() { Id = 1, Name = "李太白" };
client.AddItemToList(listid, JsonConvert.SerializeObject(litaibai));
var jiaxu = new UserInfo() { Id = 2, Name = "贾诩" };
client.AddItemToList(listid, JsonConvert.SerializeObject(jiaxu));
var gaunyu = new UserInfo() { Id = 3, Name = "关羽" };
//向右追加就是插队
client.PrependItemToList(listid, JsonConvert.SerializeObject(gaunyu));
Console.WriteLine("插队");
var caomegndeng = new UserInfo() { Id = 4, Name = "曹孟德" };
client.PrependItemToList(listid, JsonConvert.SerializeObject(caomegndeng));
5、批量添加
client.AddRangeToList(listid, new List<string>() { "001", "002", "003", "004" });
//批量去读取list中的元素
var lists = client.GetAllItemsFromList(listid);
foreach (var item in lists)
{
Console.WriteLine(item);
}
6、获取key中下标为star到end的值集合
client.AddRangeToList(listid, new List<string>() { "001", "002", "003", "004" });
var lists = client.GetRangeFromList(listid, 0, 1);//从下标0到1的值
foreach (var item in lists)
{
Console.WriteLine(item);
}
7、list 队列和集合操作 mq
var litaibai = new UserInfo() { Id = 1, Name = "李太白" };
client.AddItemToList(listid, JsonConvert.SerializeObject(litaibai));
var jiaxu = new UserInfo() { Id = 2, Name = "贾诩" };
client.AddItemToList(listid, JsonConvert.SerializeObject(jiaxu));
var gaunyu = new UserInfo() { Id = 3, Name = "关羽" };
client.AddItemToList(listid, JsonConvert.SerializeObject(gaunyu));
var caomegndeng = new UserInfo() { Id = 3, Name = "曹孟德" };
client.PrependItemToList(listid, JsonConvert.SerializeObject(caomegndeng));
//移除尾部 并返回移除的数据 先删再给数据
Console.WriteLine(client.RemoveEndFromList(listid));
foreach (var item in client.GetAllItemsFromList(listid))
{
Console.WriteLine(JsonConvert.DeserializeObject<UserInfo>(item).Name);
}
//移除头部并返回移除的数据
Console.WriteLine(client.RemoveStartFromList(listid));
foreach (var item in client.GetAllItemsFromList(listid))
{
Console.WriteLine(JsonConvert.DeserializeObject<UserInfo>(item).Name);
}
//从一个list的尾部移除一个数据,添加到另外一个list的头部,并返回移动的值
Console.WriteLine(client.PopAndPushItemBetweenLists(listid, "newlist"));
Console.WriteLine("移动之后新队列的元素结果");
Console.WriteLine(client.GetItemFromList("newlist", 0));
//根据下标获取想要的集合元素,不做移除操作
var userstr = client.GetItemFromList(listid, 0);
Console.WriteLine(JsonConvert.DeserializeObject<UserInfo>(userstr).Name);
//修改当前下标的结果
client.SetItemInList(listid, 0, "new value");