您的位置:首页 > 数据库 > Redis

Redis学习笔记(3) List类型值存取

2013-04-19 10:32 471 查看
List链表的实现为一个双线链表,支持栈和队列的实现,同时也支持反向查询。是Redis比较常用的数据结构。 List链表支持泛型,结构如List<T>,本例子比较简单,List链表存储的String类型。

List类型存储实现(主要实现队列和栈存取)

新建为RedisDemo 控制台项目,通过Nuget添加servicestack.redis引用。新建RedisClientList的类,具体代码如下:

/// <summary>
/// Redis链表操作
/// </summary>
public static class RedisClientList
{
#region Private Fields
/// <summary>
/// 实例化Redis客户端
/// </summary>
private static RedisClient redisClient = new RedisClient("127.0.0.1");

/// <summary>
/// 链表1 key名称
/// </summary>
public static string ListId = "rcl_testlist";
/// <summary>
/// 链表2 key名称
/// </summary>
public static string ListId2 = "rcl_testlist2";
#endregion

#region Public Methods

#region Stack
/// <summary>
/// 从栈中获取第一项
/// </summary>
/// <param name="listId">主键</param>
/// <returns>栈头部项</returns>
public static string PopItemFromList(string listId)
{
return redisClient.PopItemFromList(listId);
}
/// <summary>
/// 往栈中插入数据
/// </summary>
/// <param name="listId"></param>
/// <param name="item"></param>
public static void PushItemFromList(string listId, string item)
{
redisClient.PushItemToList(listId, item);
}

#endregion
#region EnqueueItemOnList

/// <summary>
/// 往队列中加入值
/// </summary>
/// <param name="listId">主键</param>
/// <param name="item">项</param>
public static void EnqueueItemOnList(string listId, string item)
{
redisClient.EnqueueItemOnList(listId, item);
}

/// <summary>
/// 往队列中取出值数据
/// </summary>
/// <param name="listId">主键</param>
/// <returns>第一个进入队列的项</returns>
public static string DequeueItemFromList(string listId)
{
return redisClient.DequeueItemFromList(listId);
}

#endregion

/// <summary>
/// 链表中数据容量
/// </summary>
/// <param name="listId">主键</param>
/// <returns></returns>
public static int NameItemCount(string listId)
{
return redisClient.GetListCount(listId);
}

#endregion
}


RedisClient对List提供的方法本例中用得的有

1、PopItemFromList:某个主键的栈中拉出最后进栈的数据值,先进后出原则。

2、PushItemFromList:往某个主键的栈中压入数据值。

3、DequeueItemFromList: 某个主键的队列中拉出最先进队列的数据值,先进先出原则。

4、EnqueueItemOnList :某个主键的队列中压入数据值。

测试代码如下:

class Program
{
static void Main(string[] args)
{

Console.WriteLine("测试栈,是否遵循先进后出原则");
Console.WriteLine("加入名字有\r\n张三");
Console.WriteLine("李四");
Console.WriteLine("王五");
Console.WriteLine("赵六");
//往栈加入数据
RedisClientList.PushItemFromList(RedisClientList.ListId, "张三");
RedisClientList.PushItemFromList(RedisClientList.ListId, "李四");
RedisClientList.PushItemFromList(RedisClientList.ListId, "王五");
RedisClientList.PushItemFromList(RedisClientList.ListId, "赵六");

//往队列加入数据
RedisClientList.EnqueueItemOnList(RedisClientList.ListId2, "张三");
RedisClientList.EnqueueItemOnList(RedisClientList.ListId2, "李四");
RedisClientList.EnqueueItemOnList(RedisClientList.ListId2, "王五");
RedisClientList.EnqueueItemOnList(RedisClientList.ListId2, "赵六");
//栈个数
var stackItemCount = RedisClientList.NameItemCount(RedisClientList.ListId);

//队列个数
var enqueueItemCount = RedisClientList.NameItemCount(RedisClientList.ListId2);
Console.WriteLine("栈结构输出");
for (var i = 0; i < stackItemCount; i++)
{
Console.WriteLine("名字:" + RedisClientList.PopItemFromList(RedisClientList.ListId));
}
Console.WriteLine("");
Console.WriteLine("");

Console.WriteLine("测试队列,是否遵循先进先出原则");
Console.WriteLine("队列结构输出");
for (var i = 0; i < enqueueItemCount; i++)
{
Console.WriteLine("名字:" + RedisClientList.DequeueItemFromList(RedisClientList.ListId2));
}
Console.ReadLine();
}

}


测试结果如下:



测试成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: