/// <summary>
/// Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,
/// Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
/// </summary>
public class RedisListService : RedisBase
{
#region 赋值
/// <summary>
/// 从左侧向list中添加值
/// </summary>
public void LPush(string key, string value)
{
RedisBase.iClient.PushItemToList(key, value);
}
/// <summary>
/// 从左侧向list中添加值,并设置过期时间
/// </summary>
public void LPush(string key, string value, DateTime dt)
{
RedisBase.iClient.PushItemToList(key, value);
RedisBase.iClient.ExpireEntryAt(key, dt);
}
/// <summary>
/// 从左侧向list中添加值,设置过期时间
/// </summary>
public void LPush(string key, string value, TimeSpan sp)
{
RedisBase.iClient.PushItemToList(key, value);
RedisBase.iClient.ExpireEntryIn(key, sp);
}
/// <summary>
/// 从左侧向list中添加值
/// </summary>
public void RPush(string key, string value)
{
RedisBase.iClient.PrependItemToList(key, value);
}
/// <summary>
/// 从右侧向list中添加值,并设置过期时间
/// </summary>
public void RPush(string key, string value, DateTime dt)
{
RedisBase.iClient.PrependItemToList(key, value);
RedisBase.iClient.ExpireEntryAt(key, dt);
}
/// <summary>
/// 从右侧向list中添加值,并设置过期时间
/// </summary>
public void RPush(string key, string value, TimeSpan sp)
{
RedisBase.iClient.PrependItemToList(key, value);
RedisBase.iClient.ExpireEntryIn(key, sp);
}
/// <summary>
/// 添加key/value
/// </summary>
public void Add(string key, string value)
{
RedisBase.iClient.AddItemToList(key, value);
}
/// <summary>
/// 添加key/value ,并设置过期时间
/// </summary>
public void Add(string key, string value, DateTime dt)
{
RedisBase.iClient.AddItemToList(key, value);
RedisBase.iClient.ExpireEntryAt(key, dt);
}
/// <summary>
/// 添加key/value。并添加过期时间
/// </summary>
public void Add(string key, string value, TimeSpan sp)
{
RedisBase.iClient.AddItemToList(key, value);
RedisBase.iClient.ExpireEntryIn(key, sp);
}
/// <summary>
/// 为key添加多个值
/// </summary>
public void Add(string key, List<string> values)
{
RedisBase.iClient.AddRangeToList(key, values);
}
/// <summary>
/// 为key添加多个值,并设置过期时间
/// </summary>
public void Add(string key, List<string> values, DateTime dt)
{
RedisBase.iClient.AddRangeToList(key, values);
RedisBase.iClient.ExpireEntryAt(key, dt);
}
/// <summary>
/// 为key添加多个值,并设置过期时间
/// </summary>
public void Add(string key, List<string> values, TimeSpan sp)
{
RedisBase.iClient.AddRangeToList(key, values);
RedisBase.iClient.ExpireEntryIn(key, sp);
}
#endregion #region 获取值
/// <summary>
/// 获取list中key包含的数据数量
/// </summary>
public long Count(string key)
{
return RedisBase.iClient.GetListCount(key);
}
/// <summary>
/// 获取key包含的所有数据集合
/// </summary>
public List<string> Get(string key)
{
return RedisBase.iClient.GetAllItemsFromList(key);
}
/// <summary>
/// 获取key中下标为star到end的值集合
/// </summary>
public List<string> Get(string key, int star, int end)
{
return RedisBase.iClient.GetRangeFromList(key, star, end);
}
#endregion #region 阻塞命令
/// <summary>
/// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp
/// </summary>
public string BlockingPopItemFromList(string key, TimeSpan? sp)
{
return RedisBase.iClient.BlockingDequeueItemFromList(key, sp);
}
/// <summary>
/// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp
/// </summary>
public ItemRef BlockingPopItemFromLists(string[] keys, TimeSpan? sp)
{
return RedisBase.iClient.BlockingPopItemFromLists(keys, sp);
}
/// <summary>
/// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp
/// </summary>
public string BlockingDequeueItemFromList(string key, TimeSpan? sp)
{
return RedisBase.iClient.BlockingDequeueItemFromList(key, sp);
}
/// <summary>
/// 阻塞命令:从list中keys的尾部移除一个值,并返回移除的值,阻塞时间为sp
/// </summary>
public ItemRef BlockingDequeueItemFromLists(string[] keys, TimeSpan? sp)
{
return RedisBase.iClient.BlockingDequeueItemFromLists(keys, sp);
}
/// <summary>
/// 阻塞命令:从list中key的头部移除一个值,并返回移除的值,阻塞时间为sp
/// </summary>
public string BlockingRemoveStartFromList(string keys, TimeSpan? sp)
{
return RedisBase.iClient.BlockingRemoveStartFromList(keys, sp);
}
/// <summary>
/// 阻塞命令:从list中key的头部移除一个值,并返回移除的值,阻塞时间为sp
/// </summary>
public ItemRef BlockingRemoveStartFromLists(string[] keys, TimeSpan? sp)
{
return RedisBase.iClient.BlockingRemoveStartFromLists(keys, sp);
}
/// <summary>
/// 阻塞命令:从list中一个fromkey的尾部移除一个值,添加到另外一个tokey的头部,并返回移除的值,阻塞时间为sp
/// </summary>
public string BlockingPopAndPushItemBetweenLists(string fromkey, string tokey, TimeSpan? sp)
{
return RedisBase.iClient.BlockingPopAndPushItemBetweenLists(fromkey, tokey, sp);
}
#endregion #region 删除
/// <summary>
/// 从尾部移除数据,返回移除的数据
/// </summary>
public string PopItemFromList(string key)
{
return RedisBase.iClient.PopItemFromList(key);
}
/// <summary>
/// 移除list中,key/value,与参数相同的值,并返回移除的数量
/// </summary>
public long RemoveItemFromList(string key, string value)
{
return RedisBase.iClient.RemoveItemFromList(key, value);
}
/// <summary>
/// 从list的尾部移除一个数据,返回移除的数据
/// </summary>
public string RemoveEndFromList(string key)
{
return RedisBase.iClient.RemoveEndFromList(key);
}
/// <summary>
/// 从list的头部移除一个数据,返回移除的值
/// </summary>
public string RemoveStartFromList(string key)
{
return RedisBase.iClient.RemoveStartFromList(key);
}
#endregion #region 其它
/// <summary>
/// 从一个list的尾部移除一个数据,添加到另外一个list的头部,并返回移动的值
/// </summary>
public string PopAndPushItemBetweenLists(string fromKey, string toKey)
{
return RedisBase.iClient.PopAndPushItemBetweenLists(fromKey, toKey);
}
#endregion
}

Redis封装之List的更多相关文章

  1. [C#] 使用 StackExchange.Redis 封装属于自己的 Helper

    使用 StackExchange.Redis 封装属于自己的 Helper 目录 核心类 ConnectionMultiplexer 字符串(String) 哈希(Hash) 列表(List) 有序集 ...

  2. [C#] 使用 StackExchange.Redis 封装属于自己的 RedisHelper

    使用 StackExchange.Redis 封装属于自己的 RedisHelper 目录 核心类 ConnectionMultiplexer 字符串(String) 哈希(Hash) 列表(List ...

  3. 使用 StackExchange.Redis 封装属于自己的 RedisHelper

    目录 核心类 ConnectionMultiplexer 字符串(String) 哈希(Hash) 列表(List) 有序集合(sorted set) Key 操作 发布订阅 其他 简介 目前 .NE ...

  4. StackExchange.Redis 封装

    博主最近开始玩Redis啊~~ 看了很多Redis的文章,感觉有点云里雾里的,之前看到是ServiceStack.Redis,看了一些大佬封装的Helper类,还是懵懵的QAQ 没办法啊只能硬着**上 ...

  5. c#使用 StackExchange.Redis 封装 RedisHelper

    公司一直在用.net自带的缓存,大家都知道.net自带缓存的缺点,就不多说了,不知道的可以查一查,领导最近在说分布式缓存,我们选的是redis,领导让我不忙的时候封装一下,搜索了两天,选了选第三方的插 ...

  6. 功能比较全的StackExchange.Redis封装帮助类(.Net/C#)

    Redis官网https://redis.io/ 以下内容未全部验证,如有问题请指出 //static NewtonsoftSerializer serializer = new Newtonsoft ...

  7. PHP 操作redis 封装的类 转的

    <?php/** * Redis 操作,支持 Master/Slave 的负载集群 * * @author jackluo */class RedisCluster{           // ...

  8. Redis封装之String

    RedisBase类 /// <summary> /// RedisBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存 /// </summary ...

  9. Java 操作Redis封装RedisTemplate工具类

    package com.example.redisdistlock.util; import org.springframework.beans.factory.annotation.Autowire ...

随机推荐

  1. luogu P1622 释放囚犯

    题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外).现在正好牢房是满的. 上级下发了一个释放名单,要求每天释放名单上的一个人. ...

  2. 洛谷 P1052 过河 (离散化+dp)

    dp非常好想, f[i] = min(f[i-len] + stone[i]) s <= len <= t 然后因为L非常大,所以我就不知道该怎么搞了 我看到m只有100,而L有1e9,我 ...

  3. centos安全配置

    http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0819/8506.html 引言: 我们必须明白:最小的权限+最少的服务=最大的安全 ...

  4. Python 入门学习 -----变量及基础类型(元组,列表,字典,集合)

    Python的变量和数据类型 1 .python的变量是不须要事先定义数据类型的.能够动态的改变 2. Python其中一切皆对象,变量也是一个对象,有自己的属性和方法 我们能够通过 来查看变量的类型 ...

  5. 三角函数之美-水波纹载入LoadingView

    一.前言 学习是要总结的.近期几天学习了画图相关的,可是使用的机会较少,如今又快要遗忘了,这次看了水波纹的绘制.认为十分有意思,还是 把实现的方法记录下来.技术无他,为手熟尔.还是要多练习,空淡误国, ...

  6. Swift学习笔记(二)——常量与变量

    这篇博客将会学习到Swift中的常量Constants和变量Variable.这是学习语言的基础.当中能够看到Swift每句后面基本都是没有:分号的,假设有加:分号的习惯,也能够加上. (1)常量声明 ...

  7. zzulioj--1832--贪吃的松鼠(位运算好题)

    1832: 贪吃的松鼠 Time Limit: 3 Sec  Memory Limit: 2 MB Submit: 43  Solved: 7 SubmitStatusWeb Board Descri ...

  8. redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用

    redis 突然大量逐出导致读写请求block   内容目录: 现象 背景 原因 解决方案 ref 现象 redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请 ...

  9. [Project Euler 409] Nim Extreme 解题报告 (统计方案数)

    题目链接:https://projecteuler.net/problem=409 题目: 题解: 题目问你必胜态的数目,我们考虑用总的方案数减去必败态的方案数(NIM游戏没有平局这个操作) 必败态的 ...

  10. Looping and dictionaries

    If you use a dictionary in a for statement, it traverses the keys of the dictionary. For example, pr ...