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. 十天学Linux内核之第四天---如何处理输入输出操作

    原文:十天学Linux内核之第四天---如何处理输入输出操作 真的是悲喜交加呀,本来这个寒假早上8点都去练车,两个小时之后再来实验室陪伴Linux内核,但是今天教练说没名额考试了,好纠结,不过想想就可 ...

  2. DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

    原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...

  3. 升级_宽视野Oracle图形升级(升级后dbca建库)—10.2.0.1.0提拔10.2.0.5.0

    ***********************************************声明**********************************************  原创作 ...

  4. oracle_利用闪回功能恢复数据

    方便起见一般:执行如下即可不用往下看: ① 启用行移动功能 alter table tbl_a enable row movement; ② 闪回表数据到某个时间点 flashback table t ...

  5. javascript中数组常用方法总结

    原文:javascript中数组常用方法总结 在javascript的基础编程中,数组是我们最常遇到的,那么数组的一些常用方法也是我们必须要掌握的,下面我们总结一下数组中常用的方法. toString ...

  6. [译文]c# /.Net 技巧: ToDictionary() and ToList()

    前言: 有两个简单好用的LINQ扩展方法 ToDictionary() 和ToList(),你可能知道或不知道,但是它的的确确可以简化查询转化为集合的任务: 简介: LINQ和延迟执行 据你所认识的L ...

  7. NEU 1440 The minimum square sum (平方剩余和欧拉准则)

    若p=2或p=4*k+1 则p能够表成两平方数的和的形式 (欧拉和费马已证明,而且有求的方法) 所以答案是p 若p=4*k+3 设a^2=n(mod p) (n!=0)  能够证明不存在b,b^2=p ...

  8. LeetCode:same_tree题解

    一.     题目: 给定两个二叉树,编写一个函数来检查它们是否相等或为空树.假设两个二叉树被觉得是相等的,那么它们在结构上是同样的,而且随意节点具有同样的值. 二.     分析 非常easy的题目 ...

  9. struts2 模型分配问题和延迟加载问题

    傅型号值问题: 首先须要说明的是:Action在请求到达ActionProxy时已经创建出来了,而且对应的创建了一个值栈. 在拦截器到达之前这个图片已经OK了.Action已经创建.并且压入了值栈vs ...

  10. Java初认识--Java语言的书写规范及基本的运算符

    一.Java中名称的规范和书写程序的规范. 1.Java中的名称规范: (1)包名全是小写:xxyyzz: (2)类名接口名:首字母大写:XxxYyy: (3)变量名和函数名:变量名不能是关键字:多单 ...