在用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. Javascript优化后的加减乘除(解决js浮点数计算bug)

    function add(a, b) { var c, d, e; try { c = a.toString().split(".")[1].length; } catch (f) ...

  2. USR-BLE101配置

    新买来的模块,默认为slave模式,波特率57600,8位数据位,无检验位,1位停止位. 发送+++a,进入命令模式. 1.设置模块名称 AT+NAME=BT_Shining 2.设置发射功率(最大功 ...

  3. 【Duke-Image】Week_4 Image restoration

    Chapter 5 Image Restoration and Reconstruction 图像复原与重建 5.1 A Model of the Image Defradation/Restorat ...

  4. Web之路笔记之一

    简单说一句,现在开始准备面试前端的知识,每天完成相关的任务,记录一些点. 2014秋季学期Web2.0课程习题 <Lab1 - About Me Page> 目标是自己动手写一个粗略的包含 ...

  5. Scala学习(一)

    最近在学习Scala,总结了一下比较基础的知识. 一.Scala简介 1.Scalable Language,是一门多范式的编程语言,是一种纯面向对象的语言,每个值都是对象. 2.特点:①Scalab ...

  6. JavaScript中面向对象的的深拷贝和浅拷贝

    理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型. 1.值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量. 例如:var num = 123 : ...

  7. 文件大小K、M、G、T

    function size2mb($size,$digits=2){ //digits,要保留几位小数 $unit= array('','K','M','G','T','P');//单位数组,是必须1 ...

  8. SAX和DOM解析的区别

    XML和JSon是ios解析文件的两种形式, 两种方法各有千秋. 1>. XML分为SAX和DOM两种方式 SAX是按顺序逐行读取文件, 查找到符合条件的内容时就会停止, 而DOM是讲内容一次性 ...

  9. 单例模式(singleton)

    什么是单例模式:(singleton) 单例模式的意图是类的对象成为系统中唯一的实例,提供一个访问点,供客户类共分享资源 单例类,必须提供一个接入点(特殊的类方法) // SingletonTools ...

  10. YCSB-压测

    安装 wget http://download.oracle.com/otn-pub/java/jdk/7u40-b43/jdk-7u40-linux-x64.rpm #注意此处到官网下载后上传,需要 ...