ServiceStack.Redis之IRedisClient(转载)
一、属性
IRedisClient的属性如下:
属性 | 说明 |
ConnectTimeout | 连接超时 |
Db | 当前数据库的ID或下标 |
DbSize | 当前数据库的 key 的数量 |
HadExceptions | |
Hashes | 存储复杂对象,一个value中有几个field |
Host | Redis的Server服务器主机地址 |
Info | 返回关于 Redis 服务器的各种信息和统计数值 |
LastSave | 最近一次 Redis 成功将数据保存到磁盘上的时间 |
Lists | 当前数据库中所有的List集合 |
Password | 密码 |
Port | Redis的Server端口 |
RetryCount | 重试次数 |
RetryTimeout | 重试超时 |
SendTimeout | 发送超时 |
Sets | 当前数据库中所有的HashSet<T>集合 |
SortedSets | 当前数据库中所有的SortedSet<T>集合 |
this[string key] | 通过索引的方式(key)访问一个字符串类型值 |
代码示例:
RClient.AddItemToSet("蜀国", "刘备");
RClient.AddItemToSet("蜀国", "关羽");
RClient.AddItemToSet("蜀国", "张飞"); IHasNamed<IRedisSet> rr = RClient.Sets;
HashSet<string> HashSetString = rr["蜀国"].GetAll();
foreach (string str in HashSetString)
{
Response.Write(str);
}
二、IRedisClient数据操作
1、ICacheClient接口
IRedisClient实现了接口ICacheClient,其中ICacheClient主要提供的功能如下:
方法 | 说明 |
Add | 根据传入的key-value添加一条记录,当key已存在返回false |
FlushAll | 使所有缓存失效(清除Redis所有数据库的所有Key) |
Get | 根据传入的key获取一条记录的值 |
GetAll | 根据传入的多个key获取多条记录的值 |
Remove | 根据传入的key移除一条记录 |
RemoveAll | 根据传入的多个key移除多条记录 |
Replace | 根据传入的key覆盖一条记录的值,当key不存在不会添加 |
Set | 根据传入的key修改一条记录的值,当key不存在则添加 |
SetAll | 根据传入的多个key覆盖多条记录 |
Increment | |
Decrement |
特别说明,比如添加的主要方法包括两个重载,一个多了个DateTime类型参数,一个多了TimeSpan类型的参数。这两个都是缓存失效的时间(相当于缓存依赖里的绝对过期时间)。
- DateTime失效点:到达该时间点,立即失效;
- TimeSpan失效点:经过该时间段,立即失效;
简单示例:
public ActionResult Index()
{
RedisClientManagerConfig RedisConfig = new RedisClientManagerConfig();
RedisConfig.AutoStart = true;
RedisConfig.MaxReadPoolSize = 60;
RedisConfig.MaxWritePoolSize = 60; PooledRedisClientManager prcm = new PooledRedisClientManager(new List<string>() { "127.0.0.1" }, new List<string>() { "127.0.0.1" }, RedisConfig); using (IRedisClient RClient = prcm.GetClient())
{
RClient.Add("c1", "缓存1");
RClient.Set("c1", "缓存2");
RClient.Replace("c1", "缓存3");
Response.Write(RClient.Get<string>("c1"));
RClient.Remove("c1");
Response.Write(RClient.Get<string>("c1") == null);
} return Content("");
}
2、简单功能
当然,除了实现ICacheClient接口的功能外,对于基本操作,实际上也还有很多功能
方法 | 说明 |
AppendToValue | 根据Key将参数value追加到原有值的结尾 |
ContainsKey | 判断Key在本数据库内是否已被使用(包括各种类型、内置集合等等) |
GetAllKeys | 获取所有的Keys集合 |
DecrementValue | 根据指定的Key,将值减1(仅整型有效) |
DecrementValueBy | 根据指定的Key,将值减去指定值(仅整型有效) |
IncrementValue | 根据指定的Key,将值加1(仅整型有效) |
IncrementValueBy | 根据指定的Key,将值加上指定值(仅整型有效) |
RenameKey | 重命名一个Key,值不变 |
SearchKeys | 从数据库中查找名称相等的Keys的集合,特殊模式如h[ae]llo,仅英文有效。 |
GetRandomKey | 随机获取一个已经被使用的Key |
GetValue | 根据Key获取值,只对string类型有效 |
GetValues | 根据输入的多个Key获取多个值,支持泛型 |
GetTimeToLive | 获取指定Key的项距离失效点的TimeSpan |
GetSortedSetCount | 获取已排序集合的项的数目,参数支持下标以及score筛选 |
ExpireEntryAt | 根据指定的key设置一项的到期时间(DateTime) |
ExpireEntryIn | 根据指定的key设置一项的到期时间(TimeSpan) |
FlushDb | 清除本数据库的所有数据 |
FlushAll | 清除所有数据库的所有数据 |
Shutdown | 停止所有客户端,保存,关闭Redis服务 |
Save | 保存数据DB文件到硬盘 |
SaveAsync | 异步保存 |
RewriteAppendOnlyFileAsync | 只在异步情况下将数据追加到服务器文件 |
WriteAll | |
PublishMessage | 将Message发送到指定的频道 |
StoreObject | |
GetValuesMap | 以键值对的方式返回值类型相同的多条数据,支持泛型与返回字符串。 |
字符串 | |
SetEntry | 根据Key修改一个值,存在则覆盖。(只能设置字符串) |
SetEntryIfNotExists | 根据Key设置一个值,仅仅当Key不存在时有效,如Key已存在则不修改(只支持字符串) |
SetEntryIfNotExists | 根据Key设置一个值,返回旧值。 |
GetEntryType |
根据Key获取当前存储的值是什么类型: None = 0 |
3、内置集合
比如,IRedisClient支持在内部维护如下集合类型的数据:
- List<T>
- 排序的List<T>(.Net 4.0后的SortedSet)
- HashSet<T>
关于如下4种类型数据的操作:
方法 | 说明 |
AddItemToList | 添加一个项到内部的List<T> |
AddItemToSet | 添加一个项到内部的HashSet<T> |
AddItemToSortedSet | 添加一个项到内部的排序List<T>,其中重载方法多了个score:排序值。优先按照score从小->大排序,否则按值小到大排序 |
AddRangeToList | 一次过将参数中的List<T>中的多个值添加入内部的List<T> |
AddRangeToSet | 一次过将参数中的HashSet<T>中的多个值添加入内部的HashSet<T> |
AddRangeToSortedSet | 一次过将参数中的List<T>中的多个值添加到内部List<T>,重载方法的score表示排序值。 |
GetAllItemsFromList | 获取指定ListId的内部List<T>的所有值 |
GetAllItemsFromSet | 获取指定SetId的内部HashSet<T>的所有值 |
GetAllItemsFromSortedSet | 获取指定ListId的内部已排序List<T>的所有值 |
GetAllItemsFromSortedSetDesc | 获取指定ListId的内部已排序List<T>的所有值,不过获取的值是倒序排列后的。 |
GetRangeFromList | 获取指定ListId的内部List<T>中指定下标范围的数据 |
GetRangeFromSortedList | 获取指定ListId的内部已排序List<T>中指定下标范围的数据 |
GetRangeFromSortedSet | 获取指定SetId的内部HashSet<T>中指定下标范围的数据 |
GetRangeFromSortedSetByHighestScore | 获取指定SetId的内部HashSet<T>中按照score由高->低排序后的分值范围的数据,并且支持skip、take |
GetRangeFromSortedSetByLowestScore | 同上,只不过是按score分值由低->高取一定范围内的数据 |
GetRangeFromSortedSetDesc | 按倒序获取内部HashSet<T>的指定下标范围内的数据 |
GetRangeWithScoresFromSortedSet | 与From相同,只不过获取的是键值对,数据中带分值score |
GetRangeWithScoresFromSortedSetByHighestScore | 同上 |
GetRangeWithScoresFromSortedSetByLowestScore | 同上 |
GetRangeWithScoresFromSortedSetDesc | 同上 |
GetAllWithScoresFromSortedSet | 获取指定ListId的已排序的内部List<T>与其score |
GetSortedItemsFromList | 从指定ListId的List<T>中获取按指定排序的集合,支持Skip,Take |
GetSortedEntryValues | 从指定ListId的List<T>中获取经过排序指定开始位置与个数的项 |
RemoveAllFromList | 移除指定ListId的内部List<T> |
RemoveItemFromList | 移除指定ListId的内部List<T>中第二个参数值相等的那一项 |
RemoveItemFromSet | 从指定SetId的内部HashSet<T>中移除与第二个参数值相等的那一项 |
RemoveItemFromSortedSet | 从指定ListId中已排序的内部List<T>中移除值相等的那一项 |
RemoveRangeFromSortedSet | 从指定ListId已排序的List<T>中移除指定下标范围的项 |
RemoveRangeFromSortedSetByScore | 从指定ListId已排序的List<T>中移除指定score范围的项 |
RemoveStartFromList | 从指定ListId移除开头那一项 |
RemoveEndFromList | 从指定ListId移除末尾那项 |
BlockingRemoveStartFromList | 阻塞地从指定ListId移除开头那一项 |
BlockingRemoveStartFromLists | |
RemoveEntry | 根据传入的多个ListId,清除多个内部List<T> |
RemoveAllLuaScripts | 清除所有的 Lua 脚本缓存 |
RemoveEntryFromHash | |
GetItemFromList | 根据ListId和下标获取一项 |
GetItemIndexInSortedSet | 根据List和值,获取内置的排序后的List<T>的下标 |
GetItemIndexInSortedSetDesc | 同上,不过顺序相反 |
GetItemScoreInSortedSet | 根据传入的ListId和值获取内置List<T>项的score |
GetListCount | 根据ListId,获取内置的List<T>的项数 |
GetSetCount | 根据SetId,获取内置的HashSet<T>的项数 |
GetIntersectFromSets | 从输入的多个HashSet<T>的Id中获取交集 |
GetUnionFromSets | 从输入的多个HashSet<T>的Id中获取并集 |
GetRandomItemFromSet | 从指定ListId的集合中获取随机项 |
StoreUnionFromSets | 将多个HashSet<T>,合并为第一个参数中的一个大HashSet<T>,第一个参数中的HashSet<T>原本可以不存在 |
StoreUnionFromSortedSets | 将多个SortedSet<T>,合并为第一个参数中的一个大SortedSet<T>,第一个参数中的SortedSet<T>原本可以不存在 |
StoreIntersectFromSets | 将交集结果保存在第一个参数的集合中,对HastSet<T>作用 |
StoreIntersectFromSortedSets | 将交集结果保存在第一个参数的集合中,对SortedSet<T>作用 |
EnqueueItemOnList | 将一个元素存入指定ListId的List<T>的头部 |
DequeueItemFromList | 将指定ListId的List<T>末尾的那个元素出列,返回出列元素 |
BlockingDequeueItemFromList | 将指定ListId的List<T>末尾的那个元素出列,区别是:会阻塞该List<T>,支持超时时间,返回出列元素 |
BlockingDequeueItemFromLists | |
BlockingPopItemFromList | 阻塞地将指定ListId的List<T>末尾的哪一个元素移除 |
BlockingPopItemFromLists | |
BlockingPopAndPushItemBetweenLists | 将第一个集合的元素移除并添加到第二个集合的头部,返回该元素,会同时阻塞两个集合 |
PopItemFromList | 从指定ListId的List<T>末尾移除一项并返回 |
PopItemFromSet | 从指定SetId的HashSet<T>末尾移除一项并返回 |
PopItemWithHighestScoreFromSortedSet | 从指定SetId的HashSet<T>移除score最高的那一项 |
PopItemWithLowestScoreFromSortedSet | 从指定SetId的HashSet<T>移除score最低的那一项 |
PopAndPushItemBetweenLists | 将第一个集合的元素移除并添加到第二个集合的头部 |
SetContainsItem | 判断指定SetId的HashSet<T>中是否包含指定的value(仅仅支持字符串) |
SortedSetContainsItem | 判断SortedSet是否包含一个键 |
TrimList | 根据ListId裁剪内置集合,保留下去from->at之间(包含from于at)的元素,其余的裁去 |
IncrementItemInSortedSet | 为指定ListId的集合中的value的分值score加上指定分值 |
SetItemInList | 重新设置指定ListId和下标的value为指定值 |
PushItemToList | 在指定ListId的内置List<T>中入列一个键值对,在末尾 |
PrependItemToList | 将一个值插入到List<T>的最前面 |
PrependRangeToList | 一次性添加多个值到指定ListId的内置List<T>中 |
GetDifferencesFromSet | 返回存在于第一个集合,但是不存在于其他集合的数据。差集 |
StoreDifferencesFromSet | 将求差集的结果保存在第一个参数的集合中 |
MoveBetweenSets | 将元素从一个集合移动到另一个集合的开头。(删除与添加) |
下面仅给出一个List<T>与HashSet<T>的示例:
//内部维护一个List<T>集合
RClient.AddItemToList("蜀国", "刘备");
RClient.AddItemToList("蜀国", "关羽");
RClient.AddItemToList("蜀国", "张飞");
List<string> ListString = RClient.GetAllItemsFromList("蜀国");
foreach (string str in ListString)
{
Response.Write(str); //输出 刘备 关羽 张飞
} RClient.AddItemToSet("魏国", "曹操");
RClient.AddItemToSet("魏国", "曹操");
RClient.AddItemToSet("魏国", "典韦");
HashSet<string> HashSetString = RClient.GetAllItemsFromSet("魏国");
foreach (string str in HashSetString)
{
Response.Write(str); //输出 典韦 曹操
}
下面再给一个范围Range操作示例:
//内部维护一个List<T>集合
RClient.AddItemToSortedSet("蜀国", "刘备", 5);
RClient.AddItemToSortedSet("蜀国", "关羽", 2);
RClient.AddItemToSortedSet("蜀国", "张飞", 3);
IDictionary<String,double> DicString = RClient.GetRangeWithScoresFromSortedSet("蜀国", 0, 2);
foreach (var r in DicString)
{
Response.Write(r.Key + ":" + r.Value); //输出
}
3、内置Hash
内部维护一个HashTable
方法 | 说明 |
SetEntryInHash | 设置一个键值对入Hash表,如果哈希表的key存在则覆盖 |
SetEntryInHashIfNotExists | 当哈希表的key未被使用时,设置一个键值对如Hash表 |
GetHashValues | 根据HashId获取多个改HashId下的多个值 |
GetValuesFromHash | 根据HashId和Hash表的Key获取多个值(支持多个key) |
GetValueFromHash | 根据HashId和Hash表的Key获取单个值 |
GetHashKeys | 获取指定HashId下的所有Key |
GetHashValues | 获取指定HashId下的所有值 |
GetHashCount | 获取指定HashId下的所有Key数量 |
HashContainsEntry | 判断指定HashId的哈希表中是否包含指定的Key |
IncrementValueInHash | 将指定HashId的哈希表中的值加上指定值 |
StoreAsHash | 将一个对象存入Hash(支持泛型) |
GetFromHash | 根据Id从Hash表中取出对象(支持泛型) |
SetRangeInHash | 通过IEnumerable<KeyValuePair<string, string>>一次性设置多个值,当内部Hash的key不存在则添加,存在则覆盖 |
代码示例:
RClient.SetEntryInHash("xxx","key","123");
List<KeyValuePair<string, string>> keyValuePairs = new List<KeyValuePair<string, string>>();
KeyValuePair<string, string> kvp = new KeyValuePair<string, string>("key", "1");
keyValuePairs.Add(kvp);
RClient.SetRangeInHash("xxx", keyValuePairs);
4、Lua Script
从 Redis 2.6.0 版本开始,通过内置的 Lua 解释器,可以执行各种Lua脚本。IRedisClient支持执行Lua脚本,其供用于执行Lua脚本的方法如下:
方法 | 说明 |
LoadLuaScript | 将一个脚本装入脚本缓存,但并不立即运行它 |
KillRunningLuaScript | 停止正在运行的指定Id的脚本 |
ExecLuaAsInt | |
ExecLuaAsList | |
ExecLuaAsString | |
ExecLuaShaAsInt | |
ExecLuaShaAsList | |
ExecLuaShaAsString | |
HasLuaScript | 判断Lua脚本是否在脚本缓存里 |
CalculateSha1 | |
WhichLuaScriptsExists |
关于Lua脚本可以到这里去了解:http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.html
5、事务
Redis中的事务
方法 | 说明 |
Watch | 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |
UnWatch | 取消 WATCH 命令对所有 key 的监视 |
AcquireLock | 申请对一个Key加锁(期间其他对象不能访问) |
CreateTransaction | 创建一个事务,返回一个IRedisTransaction对象 |
CreateSubscription | 创建一个订阅事件返回一个IRedisSubscription对象 |
CreatePipeline | 返回一个IRedisPipeline对象 |
转载:
http://www.cnblogs.com/kissdodog/p/3572084.html
ServiceStack.Redis之IRedisClient(转载)的更多相关文章
- ServiceStack.Redis之IRedisClient<第三篇>
事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...
- ServiceStack.Redis之IRedisClient 03_转
事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...
- ServiceStack.Redis之IRedisClient
事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...
- ServiceStack.Redis之IRedisClient<第三篇>【转】
事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...
- .Net使用Redis详解之ServiceStack.Redis(七) 转载https://www.cnblogs.com/knowledgesea/p/5032101.html
.Net使用Redis详解之ServiceStack.Redis(七) 序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现 ...
- .Net使用Redis详解之ServiceStack.Redis(七)
序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...
- ServiceStack.Redis
什么是Redis 首先,简述一下什么是Redis. Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.从2013年5月开始,Redis的开发由Pivotal赞助.在这之 ...
- ServiceStack.Redis——Redis于.net向上client解
ServiceStack.Redis--Redis于.net向上client解 源代码和使用: https://github.com/ServiceStack/ServiceStack.Redis 样 ...
- .Net使用Redis详解之ServiceStack.Redis
序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...
随机推荐
- 关于Linux操作系统层次结构分析
本文转自http://www.jb51.net/LINUXjishu/214104.html 首先来看一张图(这是Linux操作系统的大致层次结构): 最内层是硬件,最外层是用户常用的应用,比如说fi ...
- ZooKeeper伪集群的搭建(Windows)
首先下载 zookeeper 地址:https://www.apache.org/dyn/closer.cgi/zookeeper/ 1.下载完成解压后修改文件夹名字为zookeeper1,然后删除c ...
- html页面之间传值问题
1.如再A页面(A.html)通过window.open(B.html?code=11)或者通过其他方式跳转到其它html页面时: 可通过以下方式进行传递参数. //B.html页面function ...
- Python爬虫2------爬虫屏蔽手段之代理服务器实战
1.代理服务器: 一个处于客户端与互联网中间的服务器,如果使用代理服务器,当我们浏览信息的时候,先向代理服务器发出请求,然后由代理服务器向互联网获取信息,再返回给我们. 2.代码: import ...
- Project Euler 41 Pandigital prime( 米勒测试 + 生成全排列 )
题意:如果一个n位数恰好使用了1至n每个数字各一次,我们就称其为全数字的.例如,2143就是一个4位全数字数,同时它恰好也是一个素数. 最大的全数字的素数是多少? 思路: 最大全排列素数可以从 n = ...
- POJ 2376 Cleaning Shifts (线段树优化DP)
题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...
- 关于高校表白APP的用户模板和用户场景
用户模板一: 用户名 小明 性别,年龄 男,20岁 用户状况 单身,在校大学生 生活爱好 喜欢打篮球,唱歌 典型场景 希望找到一个心仪的可以走到最后的姑娘 典型描述 交友 用户比例 ? 用户场景一 ...
- MySQL 的各种查询列子
一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 1.whe ...
- Hadoop Word Count程序
Hadoop Word Count程序 pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...
- layer iframe加载单个图片或者加载页面
加载单个图片 layer.open({ type: , title: false, closeBtn: , area: '150px', skin: 'layui-layer-nobg', //没有背 ...