在用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. react 学习笔记

    1.Router 1.1 Histories React Router 是建立在 history 之上的.一个 history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 loca ...

  2. JS在window和document的应用

    页面跳转: window.location.href('地址') window.open('地址', '_self') 打开新窗口: window.open('地址', '_blank') 只显示地址 ...

  3. hibernate hql

    hibernate在使用hql进行select count(*) from ObjectA left join fetch apath 时会报错,多余的left join去掉即可.

  4. Fibers in JVM

    转载: Fibers in JVM

  5. sprint one

    产品backlog Id Name Imp Est How to demo 1 各个角色账号登录功能 30 20 建立数据库,数据库中存储一些角色的初始账号以便测试,输入账号密码,系统在数据库中查找账 ...

  6. cookie的弊端

    cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的. 第一:每个特定的域名下最多生成20个cookie   1.IE6或更低版本最多20个cookie 2.I ...

  7. IOS开发常见错误整理

    1.Cannot create an NSPersistentStoreCoordinator with a nil model 这是在执行到这段代码时引发的: - (void)viewDidLoad ...

  8. eclipse导入外部jar包

    首先在项目下创建一个文件夹,保存我们的jar包. 在项目名上右击,依次点击[New]-->[Floder],打开新建文件夹窗口输入文件夹名称[lib],点击[ok].我们通常在lib文件夹中存放 ...

  9. 网站整体架构去Windows化

    数据层放弃SQL Server数据库和存储过程,全部迁移到Linux平台上的MySQL数据库上: 缓存不再依赖.net自身提供的缓存机制,迁移到部署在Linux平台上的分布式的Redis上: 服务之间 ...

  10. linux操作命令

    cd / 回到跟目录 cd ..  返回上一层目录 tomcat 的logs目录执行tail -f catalina.out查看日志 ps -ef|grep tomcat 查看tomcat进程 kil ...