ServiceStack.Redis 之 IRedisTypedClient<第四篇>
IRedisTypedClient
IRedisTypedClient类相当于IRedicClient的强类型版,其方法与属性大多数与IRedisClient类似。
它支持在Redis中使用Linq查询的强大的类,它本身是一个泛型,IRedisClient的泛型方法As获得对象。
其方法原型如下:
IRedisTypedClient<T> As<T>();
1、IEntityStore<T>接口内容
其中IRedisTypedClient这个类实现了这个接口IEntityStore<T>,该接口要求提供的功能如下:
方法 | 说明 |
Delete | 根据实体删除一条记录 |
DeleteAll | 全部删除 |
DeleteById | 根据Id删除一条记录 |
DeleteByIds | 根据输入的多个Id删除多条记录 |
GetAll | 获取所有该类型的记录 |
GetById | 根据Id获取一条记录 |
GetByIds | 根据输入的多个Id获取多条记录 |
Store | 根据传入的实体,添加一条记录 |
StoreAll | 根据传入的实体集合,添加多条记录 |
Linq查询(针对于GetAll方法返回的IList<T>)示例:

- public ActionResult Index()
- {
- Person p1 = new Person() { Id = 1, Name = "刘备" };
- Person p2 = new Person() { Id = 2, Name = "关羽" };
- Person p3 = new Person() { Id = 3, Name = "张飞" };
- Person p4 = new Person() { Id = 4, Name = "曹操" };
- Person p5 = new Person() { Id = 5, Name = "典韦" };
- Person p6 = new Person() { Id = 6, Name = "郭嘉" };
- List<Person> ListPerson = new List<Person>() { p2,p3,p4,p5,p6 };
- using (IRedisClient RClient = prcm.GetClient())
- {
- IRedisTypedClient<Person> IRPerson = RClient.As<Person>();
- IRPerson.DeleteAll();
- //------------------------------------------添加--------------------------------------------
- //添加单条数据
- IRPerson.Store(p1);
- //添加多条数据
- IRPerson.StoreAll(ListPerson);
- //------------------------------------------查询--------------------------------------------
- //Linq支持
- Response.Write(IRPerson.GetAll().Where(m => m.Id == 1).First().Name); //刘备
- //注意,用IRedisTypedClient的对象IRPerson的Srore()添加的才能用IRPerson()方法读取
- Response.Write(IRPerson.GetAll().First(m => m.Id == 2).Name); //关羽
- //------------------------------------------删除--------------------------------------------
- IRPerson.Delete(p1); //删除 刘备
- Response.Write(IRPerson.GetAll().Count()); //5
- IRPerson.DeleteById(2); //删除 关羽
- Response.Write(IRPerson.GetAll().Count()); //4
- IRPerson.DeleteByIds(new List<int> { 3,4 }); //删除张飞 曹操
- Response.Write(IRPerson.GetAll().Count()); //2
- IRPerson.DeleteAll(); //全部删除
- Response.Write(IRPerson.GetAll().Count()); //0
- }
- return Content("");
- }

另外,由于该接口并没有实现修改的方法,所以修改还得通过IRedisClient的实例:

- public ActionResult Index()
- {
- PooledRedisClientManager prcm = new PooledRedisClientManager(new List<string>() { "127.0.0.1" }, new List<string>() { "127.0.0.1" }, RedisConfig);
- Person p1 = new Person() { Id = 1, Name = "刘备" };
- Person p2 = new Person() { Id = 2, Name = "关羽" };
- Person p3 = new Person() { Id = 3, Name = "张飞" };
- Person p4 = new Person() { Id = 4, Name = "曹操" };
- Person p5 = new Person() { Id = 5, Name = "典韦" };
- Person p6 = new Person() { Id = 6, Name = "郭嘉" };
- List<Person> ListPerson = new List<Person>() { p2,p3,p4,p5,p6 };
- using (IRedisClient RClient = prcm.GetClient())
- {
- IRedisTypedClient<Person> IRPerson = RClient.As<Person>();
- IRPerson.StoreAll(ListPerson);
- //读取所有的Key
- List<string> ListKeys = IRPerson.GetAllKeys();
- foreach (string key in ListKeys)
- {
- Response.Write(key + "<br/>");
- }
- //修改的话只能通过Key修改
- //urn:person:3
- //urn:person:4
- //urn:person:5
- //ids:Person
- //urn:person:1
- //urn:person:6
- //urn:person:2
- Person p7 = new Person() { Id = 8, Name = "撼地神牛" };
- RClient.Set("urn:person:1", p7);
- Response.Write(IRPerson.GetAll().First(m => m.Id == 8).Name); //输出 撼地神牛
- }
- return Content("");
- }
ServiceStack.Redis 之 IRedisTypedClient<第四篇>的更多相关文章
- ServiceStack.Redis 之 IRedisTypedClient 04_转
IRedisTypedClient IRedisTypedClient类相当于IRedicClient的强类型版,其方法与属性大多数与IRedisClient类似. 它支持在Redis中使用Linq查 ...
- ServiceStack.Redis 之 IRedisTypedClient
IRedisTypedClient IRedisTypedClient类相当于IRedicClient的强类型版,其方法与属性大多数与IRedisClient类似. 它支持在Redis中使用Linq查 ...
- ServiceStack.Redis泛型存储后getById问题
关于ServiceStack.Redis实体存储常用的有一下几个方法 StoreAsHash<T>(T entity) //将对象按照Hash存储 Redis.As<T>() ...
- servicestack.redis工具类
using System;using System.Collections.Generic;using System.Linq;using ServiceStack.Redis;using Servi ...
- 使用ServiceStack.Redis实现Redis数据读写
原文:使用ServiceStack.Redis实现Redis数据读写 User.cs实体类 public class User { public string Name { get; set; } p ...
- Service-stack.redis 使用PooledRedisClientManager 速度慢的原因之一
现在越来越多的开发者使用service-stack.redis 来进行redis的访问,但是获取redisclient的方式有多种方式,其中有一种从缓冲池获取client的方式很是得到大家的认可. L ...
- .Net使用Redis详解之ServiceStack.Redis(七)
序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...
- ServiceStack.Redis订阅发布服务的调用(Z)
1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式.发布者和订阅者之间使用频 ...
- serviceStack.Redis 在PooledRedisClientManager 中设置密码
ServiceStack.Redis 是一个C#访问Redis的客户端,可以说可以通过它实现所有需要Redis-Cli的功能.但是今天我在主Redis 实例设置了访问密码,而在slave 上没有设置, ...
随机推荐
- 20155334 《网络攻防》 Exp9 Web安全基础
<网络攻防> Exp9 Web安全基础 一.实验后回答问题 SQL注入攻击原理,如何防御: 原理: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服 ...
- navicat 创建查询失败 can not create file
数据库连接很正常, 却无法创建查询, 不知道啥毛病 竟然是存储路径问题,点开连接属性,修改高级里面的保存路径,删掉“:3308”, OK了.冒号是个windows保留的盘符,应该就是这个原因
- 洛咕 P3706 [SDOI2017]硬币游戏
假设f[i]是第i个同学胜利的概率,也就是随机序列第一个匹配到s[i]的概率 假设前面有一个字符串\(S\),(假设无限长但没有匹配),现在往后面要加上第i个串\(s[i]\),这个的概率设为\(P_ ...
- R绘图 第六篇:绘制线图(ggplot2)
线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...
- ASP.NetCore2.0概览
微软为了统一微软平台,造就了.netStandard,不管之前的Framework还是最新的.netCore都必须支持.netStandard标准来统一各个平台的开发api. 以下是之前的微软各个 ...
- JQ_One()函数特效
先看一个例子,当点击 p 元素时,增加该元素的文本大小,代码如下:<script type="text/javascript" src="http://keleyi ...
- Jq_SetTimeOut
倒计时 59 秒: var t function timedCount() { document.getElementById('txt').value=c ){ c--; }else{ clearT ...
- 使用node-webkit(v0.35.5)和innosetup(3.6.1)打包将web程序打包为桌面客户端(安装包)
这边主要是有一个客户,需要在电视机上安装一个客户端,含有视频直播功能:刚开始我们采用的webapp打包成apk安装在电视机上,发现摄像头监控画面根本无法播放(apk在手机上可以正常播放视频):排除一些 ...
- PAT甲题题解1099. Build A Binary Search Tree (30)-二叉树遍历
题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子. ...
- 《Linux内核分析》第四周学习总结 扒开系统调用的三成皮(上)
第四周 扒开系统调用的三层皮(上) 郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一. ...