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>)示例:

  1. public ActionResult Index()
  2. {
  3. Person p1 = new Person() { Id = 1, Name = "刘备" };
  4. Person p2 = new Person() { Id = 2, Name = "关羽" };
  5. Person p3 = new Person() { Id = 3, Name = "张飞" };
  6. Person p4 = new Person() { Id = 4, Name = "曹操" };
  7. Person p5 = new Person() { Id = 5, Name = "典韦" };
  8. Person p6 = new Person() { Id = 6, Name = "郭嘉" };
  9. List<Person> ListPerson = new List<Person>() { p2,p3,p4,p5,p6 };
  10.  
  11. using (IRedisClient RClient = prcm.GetClient())
  12. {
  13. IRedisTypedClient<Person> IRPerson = RClient.As<Person>();
  14. IRPerson.DeleteAll();
  15.  
  16. //------------------------------------------添加--------------------------------------------
  17.  
  18. //添加单条数据
  19. IRPerson.Store(p1);
  20. //添加多条数据
  21. IRPerson.StoreAll(ListPerson);
  22.  
  23. //------------------------------------------查询--------------------------------------------
  24.  
  25. //Linq支持
  26. Response.Write(IRPerson.GetAll().Where(m => m.Id == 1).First().Name); //刘备
  27. //注意,用IRedisTypedClient的对象IRPerson的Srore()添加的才能用IRPerson()方法读取
  28. Response.Write(IRPerson.GetAll().First(m => m.Id == 2).Name); //关羽
  29.  
  30.          //------------------------------------------删除--------------------------------------------
  31.  
  32. IRPerson.Delete(p1); //删除 刘备
  33. Response.Write(IRPerson.GetAll().Count()); //5
  34. IRPerson.DeleteById(2); //删除 关羽
  35. Response.Write(IRPerson.GetAll().Count()); //4
  36. IRPerson.DeleteByIds(new List<int> { 3,4 }); //删除张飞 曹操
  37. Response.Write(IRPerson.GetAll().Count()); //2
  38. IRPerson.DeleteAll(); //全部删除
  39. Response.Write(IRPerson.GetAll().Count()); //0
  40. }
  41.  
  42. return Content("");
  43. }

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

  1. public ActionResult Index()
  2. {
  3. PooledRedisClientManager prcm = new PooledRedisClientManager(new List<string>() { "127.0.0.1" }, new List<string>() { "127.0.0.1" }, RedisConfig);
  4.  
  5. Person p1 = new Person() { Id = 1, Name = "刘备" };
  6. Person p2 = new Person() { Id = 2, Name = "关羽" };
  7. Person p3 = new Person() { Id = 3, Name = "张飞" };
  8. Person p4 = new Person() { Id = 4, Name = "曹操" };
  9. Person p5 = new Person() { Id = 5, Name = "典韦" };
  10. Person p6 = new Person() { Id = 6, Name = "郭嘉" };
  11. List<Person> ListPerson = new List<Person>() { p2,p3,p4,p5,p6 };
  12.  
  13. using (IRedisClient RClient = prcm.GetClient())
  14. {
  15. IRedisTypedClient<Person> IRPerson = RClient.As<Person>();
  16. IRPerson.StoreAll(ListPerson);
  17.  
  18. //读取所有的Key
  19. List<string> ListKeys = IRPerson.GetAllKeys();
  20. foreach (string key in ListKeys)
  21. {
  22. Response.Write(key + "<br/>");
  23. }
  24.  
  25. //修改的话只能通过Key修改
  26. //urn:person:3
  27. //urn:person:4
  28. //urn:person:5
  29. //ids:Person
  30. //urn:person:1
  31. //urn:person:6
  32. //urn:person:2
  33. Person p7 = new Person() { Id = 8, Name = "撼地神牛" };
  34. RClient.Set("urn:person:1", p7);
  35. Response.Write(IRPerson.GetAll().First(m => m.Id == 8).Name); //输出 撼地神牛
  36. }
  37.  
  38. return Content("");
  39. }

ServiceStack.Redis 之 IRedisTypedClient<第四篇>的更多相关文章

  1. ServiceStack.Redis 之 IRedisTypedClient 04_转

    IRedisTypedClient IRedisTypedClient类相当于IRedicClient的强类型版,其方法与属性大多数与IRedisClient类似. 它支持在Redis中使用Linq查 ...

  2. ServiceStack.Redis 之 IRedisTypedClient

    IRedisTypedClient IRedisTypedClient类相当于IRedicClient的强类型版,其方法与属性大多数与IRedisClient类似. 它支持在Redis中使用Linq查 ...

  3. ServiceStack.Redis泛型存储后getById问题

    关于ServiceStack.Redis实体存储常用的有一下几个方法 StoreAsHash<T>(T entity)  //将对象按照Hash存储 Redis.As<T>() ...

  4. servicestack.redis工具类

    using System;using System.Collections.Generic;using System.Linq;using ServiceStack.Redis;using Servi ...

  5. 使用ServiceStack.Redis实现Redis数据读写

    原文:使用ServiceStack.Redis实现Redis数据读写 User.cs实体类 public class User { public string Name { get; set; } p ...

  6. Service-stack.redis 使用PooledRedisClientManager 速度慢的原因之一

    现在越来越多的开发者使用service-stack.redis 来进行redis的访问,但是获取redisclient的方式有多种方式,其中有一种从缓冲池获取client的方式很是得到大家的认可. L ...

  7. .Net使用Redis详解之ServiceStack.Redis(七)

    序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...

  8. ServiceStack.Redis订阅发布服务的调用(Z)

      1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式.发布者和订阅者之间使用频 ...

  9. serviceStack.Redis 在PooledRedisClientManager 中设置密码

    ServiceStack.Redis 是一个C#访问Redis的客户端,可以说可以通过它实现所有需要Redis-Cli的功能.但是今天我在主Redis 实例设置了访问密码,而在slave 上没有设置, ...

随机推荐

  1. HQL语句的3个小技巧

    1.巧用new map        在查询表中部分字段的值时,我们可以用map来封装这些字段的值,可以提高查询效率,而且查出数据也更小,传输到页面的速度也更快.  如:查询角色时,我们只想要 id, ...

  2. MFC Timer定时器

    知识点: 定时器Timer 创建定时器 销毁定时器 代码测试 一. 创建定时器 UINT SetTimer( HWND hWnd, // 指定关联定时器的窗口句柄,在MFC版将省略此参数 UINT n ...

  3. webVR全景图多种方案实现(pannellum,aframe,Krpano,three,jquery-vrview)

    前言 有一篇文章我说了H5实现全景图预览,全景视频播放的原理,有需要的小伙伴可以自行去看一下 今天我就拿出我的实践干货出来,本人实测实测过 需求 老板:我需要可以上传全景图片,然后手机网站上都可以36 ...

  4. Js_数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...

  5. 怎么理解LAXCUS大操作系统系统在云计算体系中的定位

    最近一直在做laxcus大数据操作系统的分布式应用开发,因为做得多了,感触也多了.按照云计算三层定义,即iaas(基础设施即服务).paas(平台即服务).saas(软件即服务),laxcus属于pa ...

  6. 2. Python3 基础入门

    Python3 基础入门 编码 在python3中,默认情况下以UTF-8编码.所有字符串都是 unicode 字符串,当然也可以指定不同编码.体验过2.x版本的编码问题,才知道什么叫难受. # -* ...

  7. 了不起的Node.js--之四

    阻塞与非阻塞IO 绝大多数对node.js的讨论都把关注点放在了其处理高并发的能力上.Node框架给开发者提供了构建高性能网络应用的强大能力. 我使用的开发工具是Mac版的WebStorm,这个工具支 ...

  8. Redis学习笔记之入门基础知识——其他特性

    1.订阅(subscribe)与发布(publish) 用户订阅某一个频道,频道发布新的信息时,会将信息告知用户 2.数据安全 1)     快照持久化(时间点转储,实质是数据副本) 操作:SAVA. ...

  9. 【Alpha】第八次Scrum meeting

    今日任务一览: 姓名 今日完成任务 所耗时间 刘乾 学习js并学会使用js读写xml文件.学习python读取xml的方式... 然后上午满课,下午从1点到10点当计组助教去沙河教了一下午+一晚上,所 ...

  10. @Autowire和@Resource注解的区别

    1.@Autowire是Spring开发的,而@Resource是jdk开发的 2.@Autowire是按照type来注解的,而@Resource是按照名称来的,如果名称找不到,那么就按照type,, ...