Redis .NET开源组件Beetle.Redis

Beetle.Redis是一款开源的Redis Client for .net组件,它提供非常简便的操作方式可以让开发人员轻松地访问Redis,同时提供json和protobuf的数据格式支持.基于连接池的默认访问方式可以让开发人员简洁高效地访问redis同时,而不必关心线程和连接同步等一系列复杂的事情.

配置

组件在使用前要进行配置,主要用于描述访问Redis的信息,分别是读写服务表列.

  <configSections>
<section name="redisClientSection" type="Beetle.Redis.RedisClientSection, Beetle.Redis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</configSections>
<redisClientSection dB="0" xmlns="urn:Beetle.Redis">
<writes>
<add host="192.168.0.105" connections="9"/>
</writes>
<reads>
<add host="192.168.0.105" connections="9"/>
</reads>
</redisClientSection>

以上分别配置读/写服务地址,默认开启的连接数是9个,访问数据库是0;根据实际应用的需要读/写都可以配置多个redis服务信息.

使用

组件的使用非常简单,在使用前并不需要象其他redis client组件一样定义连接信息,组件在缺省的情况下会自动使用 redisClientSection的配置环境去操作相应的Redis服务.

  • String Get/Set

                StringKey key = "HENRY";
    string Remark = "henryfan gz cn 18 henryfan@msn.com 28304340";
    key.Set(Remark);
    Assert.AreEqual(Remark, key.Get<string>());
  • Json Get/Set
        JsonKey rk = "henry_json";
    UserBase ub = new UserBase();
    ub.Name = "henryfan";
    ub.City = "gz";
    ub.Counrty = "cn";
    ub.Age = 10;
    rk.Set(ub);
    Assert.AreEqual(ub.Name, rk.Get<UserBase>().Name);
  • Protobuf Get/Set
                ProtobufKey rk = "henry_protobuf";
    UserBase ub = new UserBase();
    ub.Name = "henryfan";
    ub.City = "gz";
    ub.Counrty = "cn";
    ub.Age = 10;
    rk.Set(ub);
    Assert.AreEqual(ub.Name, rk.Get<UserBase>().Name);
  • List
     [TestMethod]
    public void LST_POP_PUSH()
    {
    ProtobufList<UserBase> lst = "USERS";
    lst.Push(new UserBase { Name = "henry", Age = 18, City = "gz", Counrty = "cn" });
    Assert.AreEqual("henry", lst.Pop().Name);
    }
    [TestMethod]
    public void LST_REMOVE_ADD()
    {
    ProtobufList<UserBase> lst = "USERS";
    lst.Add(new UserBase { Name = "henry", Age = 18, City = "gz", Counrty = "cn" });
    lst.Add(new UserBase { Name = "bbq", Age = 18, City = "gz", Counrty = "cn" });
    Assert.AreEqual("bbq", lst.Remove().Name);
    }
    [TestMethod]
    public void LST_Length()
    {
    ProtobufList<UserBase> lst = "USERS";
    lst.Clear();
    lst.Add(new UserBase { Name = "henry", Age = 18, City = "gz", Counrty = "cn" });
    lst.Add(new UserBase { Name = "bbq", Age = 18, City = "gz", Counrty = "cn" });
    Assert.AreEqual(lst.Count(), 2);
    }
    [TestMethod]
    public void LST_Region()
    {
    ProtobufList<UserBase> lst ="USERS";
    lst.Clear();
    for (int i = 0; i < 10; i++)
    {
    lst.Add(new UserBase { Name = "henry" + i, Age = 18, City = "gz", Counrty = "cn" });
    }
    IList<UserBase> items = lst.Range();
    Assert.AreEqual(items[0].Name, "henry0");
    Assert.AreEqual(items[9].Name, "henry9");
    items = lst.Range(5, 7);
    Assert.AreEqual(items[0].Name, "henry5");
    Assert.AreEqual(items[2].Name, "henry7");
    }
  • MapSet
      [TestMethod]
    public void MapSet()
    { JsonMapSet map = "HENRY_INFO";
    UserBase ub = new UserBase();
    ub.Name = "henryfan";
    ub.City = "gz";
    ub.Counrty = "cn";
    ub.Age = 10;
    Contact contact = new Contact();
    contact.EMail = "hernyfan@msn.com";
    contact.QQ = "28304340";
    contact.Phone = "13660223497";
    map.Set(ub, contact);
    IList<object> data = map.Get<UserBase, Contact>();
    Assert.AreEqual(ub.Name, ((UserBase)data[0]).Name);
    Assert.AreEqual(contact.Phone, ((Contact)data[1]).Phone); }
    [TestMethod]
    public void MapSetdRemove()
    {
    JsonMapSet map = "HENRY_INFO";
    UserBase ub = new UserBase();
    ub.Name = "henryfan";
    ub.City = "gz";
    ub.Counrty = "cn";
    ub.Age = 10;
    Contact contact = new Contact();
    contact.EMail = "hernyfan@msn.com";
    contact.QQ = "28304340";
    contact.Phone = "13660223497";
    map.Set(ub, contact);
    map.Remove<Contact>();
    contact = map.Get<Contact>();
    Assert.AreEqual(null, contact); }
    [TestMethod]
    public void MapSetClear()
    {
    JsonMapSet map = "HENRY_INFO";
    UserBase ub = new UserBase();
    ub.Name = "henryfan";
    ub.City = "gz";
    ub.Counrty = "cn";
    ub.Age = 10;
    Contact contact = new Contact();
    contact.EMail = "hernyfan@msn.com";
    contact.QQ = "28304340";
    contact.Phone = "13660223497";
    map.Set(ub, contact);
    map.Clear();
    IList<object> data = map.Get<UserBase, Contact>();
    Assert.AreEqual(null, data[0]);
    Assert.AreEqual(null, data[1]);
    }

性能

Sample

下载

Beetle.Redis 0.6

NorthWind Sample

Source Project

Redis .NET开源组件Beetle.Redis的更多相关文章

  1. .NET redis 客户端开源组件 FreeRedis (继 CSRedisCore 之后重写)

    什么是 FreeRedis FreeRedis 是一款 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2.1+..NETFr ...

  2. ELK(+Redis)-开源实时日志分析平台

    ################################################################################################### ...

  3. 分布式限流组件-基于Redis的注解支持的Ratelimiter

    原文:https://juejin.im/entry/5bd491c85188255ac2629bef?utm_source=coffeephp.com 在分布式领域,我们难免会遇到并发量突增,对后端 ...

  4. 360开源的类Redis存储系统:Pika

    Pika 是 360 DBA 和基础架构组联合开发的类 Redis 存储系统,完全支持 Redis 协议,用户不需要修改任何代码,就可以将服务迁移至 Pika.有维护 Redis 经验的 DBA 维护 ...

  5. 测试Beetle.Redis+Web Api

    在Web Api里用Beetle.Redis调用Redis服务端的TIME命令返回一个json格式,然后客户端是用的HttpTest4Net做的测试: CPU:I7-3770 内存:4G+4G 硬盘: ...

  6. redis的搜索组件 redis-search4j

    redis-search4j是一款基于redis的搜索组件. 特点 1.基于redis,性能高效 2.实时更新索引 3.支持Suggest前缀.拼音查找(AutoComplete功能) 4.支持单个或 ...

  7. Springboot +redis+⾕歌开源Kaptcha实现图片验证码功能

    Springboot +redis+⾕歌开源Kaptcha实现图片验证码功能 背景 注册-登录-修改密码⼀般需要发送验证码,但是容易被 攻击恶意调⽤ 什么是短信-邮箱轰炸机 手机短信轰炸机是批.循环给 ...

  8. 组件-------(一)redis系列--安装部署redis+实现redis分布式缓存 java+Spring+redis

    目的:解决单机session不能共享问题,插入查询数据库时间效率问题,实现分布式缓存. 准备材料:Redis 下载链接 http://pan.baidu.com/s/1dEGTxvV 相关jar包如果 ...

  9. Redis学习笔记一(Redis的详细安装及Linux环境变量配置和启动)

     Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 我使用的是下面这个版本: 若没有资源的话,我在 ...

随机推荐

  1. jvm对大对象分配内存的特殊处理(转)

    前段日子在和leader交流技术的时候,偶然听到jvm在分配内存空间给大对象时,如果young区空间不足会直接在old区切一块过去.对于这个结论很好奇,也比较怀疑,所以就上网搜了下,发现还真有这么回事 ...

  2. Swift——(三)Swift神奇的下划线

    在Swift在.有许多神奇的下划线,在这里,我们将看到神奇的汇总,我希望能够帮助其他很多学习Swift朋友. @Author: twlkyao转载或者引用请保留此行. 1.格式化数字字面量     通 ...

  3. DataTable转化为List

    public List<T> ConvertToList<T>(DataTable dt) where T : new()        {            // 定义集 ...

  4. 判断sqlserver对象是否存在

    --查看对象是否已经存在  --数据库是否存在     --if exists (select * from sys.databases where name = ’数据库名’)    --  dro ...

  5. DirectX11 学习笔记3 - 创建一个立方体 和 轴

    该方案将在进一步的程序 面向对象. 独立的模型类.更像是一个框架. 其中以超过遇到了一个非常有趣的问题,.获得一晚.我读了好几遍,以找到其他的列子.必须放在某些功能Render里面实时更新,而不是仅仅 ...

  6. 深入struts2.0(五)--Dispatcher类

    1.1.1       serviceAction方法 在上个Filter方法中我们会看到例如以下代码: this.execute.executeAction(request, response, m ...

  7. 常用批处理命令总结3之Find和FindStr

    原文:常用批处理命令总结3之Find和FindStr find 作用:从文件中收索字符串 格式:find 参数 "字符串" 路径\文件名 参数: /V 显示所有未包含指定字符串的行 ...

  8. MVC验证11-对复杂类型使用jQuery异步验证

    原文:MVC验证11-对复杂类型使用jQuery异步验证 本篇体验使用"jQuery结合Html.BeginForm()"对复杂类型属性进行异步验证.与本篇相关的"兄弟篇 ...

  9. MySQL 一般查询日志(General Query Log)

    与大多数关系型数据库,日志文件是MySQL数据库的一个重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志.慢查询日志,等等. 这些日志能够帮助我们定位mysqld ...

  10. linux内核的冒险md来源释义# 14raid5非条块读

    linux内核的冒险md来源释义# 14raid5非条块读 转载请注明出处:http://blog.csdn.net/liumangxiong 假设是非条块内读.那么就至少涉及到两个条块的读,这就须要 ...