在用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. PBOC~PPT-补充A(转)

    qPBOC简介PBOC 3.0非接交易包括:非接PBOC和qPBOC.非接PBOC流程与接触式无异,仅命令交互方式改变,故不再赘述. qPBOC - 快速借记/贷记,交易特点:目录选择PPSE使用“2 ...

  2. python函数默认参数坑

    def add(a=3,b): print a,b add(4) 这样写的话,运行的话就会报错:SyntaxError: non-default argument follows default ar ...

  3. 百度app测试服务

    https://cloud.baidu.com/product/mat.html?t=cp:ct|pp:fcforbce242jrcs|cn:fcforbce242|pu:newAATJRKWS002 ...

  4. 2015项目timeline

    1. app签到  http://h5.a.rongyi.com/html/app/sign/index.html (pc无效果.app端 20160105) 2.圣诞活动--砍价 http://h5 ...

  5. Response.Write("<script>alert('弹出对话框!')</script>") 后跟Response.Redirect("page.aspx");不能弹出对话框,直接跳转页面了 如何解?

    Response.Write和Response.Redirect一起用的时候就会这样,write脚本和redirect脚本不能同时使用,这样不会执行脚本,最好使用ClientScript 改进方法: ...

  6. html文件里引入文件html文件

    导入通用的代码除了使用php外 iframe在很多界面使用起来比较方便 比如说要写导航 在好几个界面都要用这个导航 可以用iframe引用 实例:这个header.html是我写的一个导航界面 在in ...

  7. Anaconda died after receiving signal 7

    安装RHEL6-64时出现如下提示 Anaconda died after receiving signal 7 1 Anaconda是啥 是RedHat.CentOS.Fedora等Linux的安装 ...

  8. 【转】Pycharm的激活

    如果要基于Python进行开发的话,那么pycharm是个不错的选择,试用一个月以后需要激活,原文如下: 原文链接:http://blog.csdn.net/lanchunhui/article/de ...

  9. ajax基础1

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况 ...

  10. chrome经常崩溃解决过程

    之前chrome常崩溃,也没有找到原因,就将就着用吧,一直用到今天,今天连续几次崩了,突然想到,难道是因为我访问的域名没有解析(能想到这个,是因为今天分配公司域名测试的时候常输错),于是就输入一个不存 ...