Redis系列(二)-Hredis客户端设计及开源

接上篇c#实现redis客户端(一),重新整理些了下。

阅读目录:

  1. 项目说明
  2. Hredis设计图
  3. 单元测试场景
  4. 总结

项目说明

背景:因为有地方要用,而又没找到对sentinel良好支持的Net客户端,所以就简单重写了个。

目标:尽可能的简单,轻量级,不进行过度的封装,使用方便。

代码说明:

1. 与Redis服务端的Socket通信、协议格式封装。在RedisBaseClient里 

2. 只对Set、Get封装,暴露出Send接口。在RedisCommand里面添加自己想要的支持。

var info = rcClient.Send(RedisCommand.INFO);

3.  RedisBaseClient是通信层。 如果扩展其他用途继承即可,比如RedisPubSub:RedisBaseClient,RedisSentinel:RedisBaseClient

4.  供上层良好调用的话,可以做成partial类扩展redisclient。比如RedisClient.String

5.  订阅的监听是直接while的,可在触发事件里面做阻塞。

6.  PoolRedisClient池的实现使用ConcurrentStack,仅达到了复用socket连接的目的。

7.  支持socket重连,做法是关闭旧连接,重新建立新socket。

8.  多个命令使用管道实现。见set实现

后续思路:

      一:PoolRedisClient池里面连接的释放问题?

1. 使用using  2. 不用使用using,会自动检测并回收 。

不做成自动检测的话,就会出现连接无法释放的问题,总会有人忘记释放的。 所以会优化成1+2结合的方式。

二:client池和socket池分离,socket单独做一个池? 还在考虑中。

Hredis设计图

命令执行流程图、解决方案图、类图。

  

单元测试场景

一. Info命令通信、密码配置。

二. 普通订阅,及模式匹配订阅。这里订阅的是Sentinel事件信息。

        [TestMethod, TestCategory("PushSub")]
        public void Subscribe_Sentinel_Test()
        {
            using (RedisPubSub rsc = new RedisPubSub("127.0.0.1", 20001))
            {
                rsc.SubscriptionReceived += rsc_SubscriptionReceived;
                //rsc.Subscribe("+sdown");
            }
        }

三.  client连接池、Parallel并发模拟。

三.  超时重连、多线程并发超时重连。

四. String类型添加、过期时间添加。

[TestMethod, TestCategory("String")]
        public void Set_Get_key()
        {
            using (var rcClient = new RedisClient(ip, port))
            {
                rcClient.Set("Set_Get_key", "Set_Get_key");
                var info2 = rcClient.Get("Set_Get_key");
                Assert.AreEqual(info2.ToString(), "Set_Get_key");
            }
        }

总结

开源地址:https://github.com/mushroomsir/HRedis  有需要的同学,可以参考下。

Hredis后续会跟实际需求来写,如果有更好的实现思路,欢迎一起交流。

时间: 2024-11-08 05:40:25

Redis系列(二)-Hredis客户端设计及开源的相关文章

Redis系列(二):Redis的5种数据结构及其常用命令

上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法, 没看过的同学可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. 本篇博客我们来讲解下Redis的5种数据结构及其常用命令,5种数据结构分别为: 字符串String 列表List 集合Set 散列Hash 有序集合ZSet 注意事项:Redis可以存储键(key)值(value)对的映射,其中键(key)一直是String,而值可以是上面提到的5种数据结构中的一种. 1. 字符

Symantec Backup Exec2012 系列二:客户端安装

1.在BE服务器安装目录中默认有客户端的安装程序,将整个目录COPY到客户端机器中. 2.根据系统位数X64\X86进入对应的文件夹,双击Setupaax64.cmd程序 3.显示个黑色DOS窗口.不需要人工交换,默认在后台安装.当DOS窗口自动关闭,表示BE客户端安装完成. 4.安装完成后开始菜单中可以看到be utility程序.我们需要利用BE UTILITY工具发布客户端到备份服务器. 5.点击更改设置 6.点击添加BE服务器,输入BE服务器IP地址和用户密码. 7.BE服务器添加成功.

Redis系列二(yum切换为网易163)

这个可能和Redis没有直接的关系... 是我在yum install的时候发现centos的yum实在是太慢,上网查了下.网易163有个yum镜像,为了让CentOS6使用速度更快的YUM更新源,可以选择163(网易)的更新源. 切换也很简单,具体步骤如下: 1.下载repo文件 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo 2.备份并替换系统的repo文件 cd /etc/yum.repos.d/mv CentOS-Base.

Redis系列 (二) String,List类型

一:String类型 string是二进制安全的(图片视频序列化存储,取出来还是可以用的)最多512M get key (拿出来)             set key(设key)             append key value(在原来基础上增加)             strlen key(长度)             setnx key value(存在时候不设置成功1,不成功0)            不成功                        成功      

Redis系列三:Redis常用设置

一.redis的配置文件redis.conf位置 centos:默认在/etc/redis.conf ubuntu:可以从解压缩后的目录里将配置文件复制到该目录 二.启动redis时指定配置文件 $redis-server /etc/redis.conf 三.常用配置说明 daemonize yes #设置后台运行,默认redis不在后台运行 logfile "/var/log/redis.log" #设置log文件地址,默认使用标准输出,即直接打印在命令行终端的窗口上 require

redis 系列19 客户端

原文:redis 系列19 客户端 一. 概述 Redis服务器是可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复.通过使用I/O多路复用技术实现的文件事件处理器,Redis服务器使用单进程单线程的方式来处理命令请求,并与多个客户端进行网络通信. 1.1 伪客户端和普通客户端 对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redis.h/redisClient结构(客户端状态),这个结构保存了客

C#进阶系列——DDD领域驱动设计初探(二):仓储Repository(上)

前言:上篇介绍了DDD设计Demo里面的聚合划分以及实体和聚合根的设计,这章继续来说说DDD里面最具争议的话题之一的仓储Repository,为什么Repository会有这么大的争议,博主认为主要原因无非以下两点:一是Repository的真实意图没有理解清楚,导致设计的紊乱,随着项目的横向和纵向扩展,到最后越来越难维护:二是赶时髦的为了“模式”而“模式”,仓储并非适用于所有项目,这就像没有任何一种架构能解决所有的设计难题一样.本篇通过这个设计的Demo来谈谈博主对仓储的理解,有不对的地方还望

Storm系列二: Storm拓扑设计

Storm系列二: Storm拓扑设计 在本篇中,我们就来根据一个案例,看看如何去设计一个拓扑, 如何分解问题以适应Storm架构,同时对Storm拓扑内部的并行机制会有一个基本的了解. 本章代码都在: [email protected]:zyzdisciple/storm_study.git 项目下的 user_behavior包下. 问题案例 有这样一种场景,在前端存在会话,我们会不断收到来自前端的消息,消息包含消息的发送时间,消息内容,结束标识, 消息的发送者, SessionId等其他信

Redis系列--内存淘汰机制(含单机版内存优化建议)

https://blog.csdn.net/Jack__Frost/article/details/72478400?locationNum=13&fps=1 每台redis的服务器的内存都是有限的,而且也不是所有的内存都用来存储信息.而且redis的实现并没有在内存这块做太多的优化,所以实现者为了防止内存过于饱和,采取了一些措施来管控内存. 文章结构:(1)内存策略:(2)内存释放机制原理:(3)项目中如何合理应用淘汰策略:(4)单机版Redis内存优化注意点. 一.内存策略:先来吃份官方文档