在用Python或dotNET redis客户端连接redis服务器的时候,当你调用客户端的SET方法后同时还想得到其返回的字符串,那么需要处理一下。

1. Redis Python redis客户端:
        默认的SET方法返回的数据类型是布尔型的,即True或False,如果需要获取调用SET方法后服务器返回的原始数据,那么需要在客户端对象上调用一下set_response_callback方法即可,于是返回就是redis服务器的数据了

from redis import Redis
        redis_client = Redis(host="192.168.0.123", port=1234)
        redis_client.set_response_callback('SET', lambda a,**b: a)

redis_key = "test"
        redis_param = '{"id":1,"title":"test"}'
        redis_resp_string = redis_client.set(redis_key, redis_param)

2. Redis dotNET ServiceStack.Redis 客户端:
        Redis dotNET版的ServiceStack.Redis客户端需要修改源码,默认的SET方法是不会返回数据的。

2.1 在源代码的RedisClient.ICacheClient.cs文件增加一个方法:
        public string SetCustom(string key, string value)
        {
            return base.SetCustom(key, value.ToUtf8Bytes());
        }

2.2 然后在RedisNativeClient.cs文件增加一个方法:
        public string SetCustom(string key, byte[] value)
        {
            if (key == null)
                throw new ArgumentNullException("key");
            value = value ?? new byte[0];

if (value.Length > OneGb)
                throw new ArgumentException("value exceeds 1G", "value");

return SendExpectSuccessCustom(Commands.Set, key.ToUtf8Bytes(), value);
        }

2.3  然后在RedisNativeClient_Utils.cs文件增加两个方法:
        protected string SendExpectSuccessCustom(params byte[][] cmdWithBinaryArgs)
        {
            if (!SendCommand(cmdWithBinaryArgs))
                throw CreateConnectionError();

if (Pipeline != null)
            {
                Pipeline.CompleteStringQueuedCommand(ExpectSuccessCustom);
                return String.Empty;
            }
            return ExpectSuccessCustom();
        }

protected string ExpectSuccessCustom()
        {
            var multiData = ReadMultiData();
            byte[] byteData = multiData[1];
            string stringData = byteData.FromUtf8Bytes();
            return stringData;
        }

2.4 调用方式:
        redisClient = new RedisClient("192.168.0.123", 9570);
        string strKey = "test";
        string strValue = "123";
        string redisRespString = redisClient.SetCustom(strKey, strValue);

3. 修改RedisClient.ICacheClient.cs文件里的Get<T>(string key)方法

public T Get<T>(string key){
    //原代码
    /*
    return typeof(T) == typeof(byte[])
                ? (T)(object)base.Get(key)
                : JsonSerializer.DeserializeFromString<T>(GetValue(key));
    */

//修改成如下
    if(typeof(T) == typeof(byte[])){
        return (T)(object)base.Get(key);
    }else{
        string resultValue = GetValue(key);
        if (typeof(T) == typeof(string)){
            return (T)(object)resultValue;
        }else{
            return JsonSerializer.DeserializeFromString<T>(resultValue);
        }
    }
}

Python/dotNET Redis服务连接客户端调用SET方法的同时获取Redis服务器返回的内容的更多相关文章

  1. CXF发布webService服务以及客户端调用

    这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...

  2. 客户端调用服务器端方法——ASP.NET AJAX(Atlas)、Anthem.NET和Ajax.NET Professional实现之小小比较

    前几天曾经发过一篇<ASP.NET AJAX(Atlas)和Anthem.NET——管中窥豹般小小比较>,Jeffrey Zhao说用ASP.NET AJAX中的UpdatePanel似乎 ...

  3. SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)

    1.概念:Restful 基础架构 2.具体内容 对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确的讲解,那么本次为 了清 ...

  4. 【Python】【Flask】前端调用后端方法返回页面

    后端代码: @app.route("/test",methods=['POST','GET']) def test(): return "我是测试的" 前端代码 ...

  5. 【Python】【Flask】前端调用后端方法

    后端代码: @app.route("/test",methods=['POST','GET']) def test(): return "我是测试的" 前端代码 ...

  6. asp.net javascript客户端调用服务器端方法

    如何用js调用服务器端方法.首先服务器端方法的格式如下 [System.Web.Services.WebMethod]        public static void serverMethod(s ...

  7. nginx 加工上游服务器返回的内容,并返回给客户端

    禁用上游响应头部功能 Syntax: proxy_ignore_headers field ...; Default: — Context: http, server, location 功能介绍:某 ...

  8. 针对WebService服务,客户端调用时报序列化的最大项数maxItemsInObjectGraph超过65536问题

    今天在使用webservice服务时候,报异常"The InnerException message was 'Maximum number of items that can be ser ...

  9. webservice 针对WebService服务,客户端调用时报序列化的最大项数maxItemsInObjectGraph超过65536问题

    今天在使用webservice服务时候,报异常“The InnerException message was 'Maximum number of items that can be serializ ...

随机推荐

  1. testlink部署与迁移

    几个特殊的文件: 1.D:\xampp\htdocs\testlink\config.inc  安装配置文件,此处需要修改安装目录(g_repositoryPath.log_path) 2.D:\xa ...

  2. CSS样式应用

    CSS样式应用的方法: (1)行内样式,将css样式直接放到标签当中,一般都是放入标签的style属性中,它是最方便的一种样式,也是最不方便修改的样式.如下: (2)内嵌式,通过将css写在网页源文件 ...

  3. sql server sql语句导入数据到execl2007中

    insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\c.xlsx','select 字段1,字段2 FR ...

  4. asp.net "true"的小坑

    在cs文件中 写了一个 属性 protected bool IsTrue { get{ return true; } } 在页面 .aspx文件中 在js中 var flag="<%= ...

  5. php知识分享

                                                                      PHP 获取ip地址代码汇总                     ...

  6. python 筛选股票

    x[0] = '0' or x[0]='6' or x[0]='3' len(x)=6 x.isdigit() *但是有的债券也是6位 *比如010007.IB

  7. RPM

    1.安装RPM 使用-ivh选项即可,能查看安装信息和进度. 例如: #RPM -ivh XXX.rpm RPM升级与更新,使用-Uvh选项或者-Fvh选项,两者略有区别. -Uvh选项:后面接的软件 ...

  8. android xfermode绘图

    1.fermode:是来自 transfer-modes,在画笔中设置xfermode后,画笔在使用的时候就会应用设置的像素转换模式.就类似于ps中的选取功能,留下的选取是从原选区中去除还是合并,取交 ...

  9. html 中自动换行的实现方式

    1,<div type="word-wrap: break-word;word-break:break-all;"> </div> 2, <div t ...

  10. 模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数 字,求和之后输出结果,写出其的设计思想、程序流程图、源程序代码。

    一 设计思想 首先现在file中建立一个类,并把任务名和类名写上(注意类名的大写):第二步则是参数的输入,并且定义求和变量:第三步则是对参数数据类型的要求,要把字符类型转化为整数类型并输出(这也是本道 ...