Python/dotNET Redis服务连接客户端调用SET方法的同时获取Redis服务器返回的内容
在用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服务器返回的内容的更多相关文章
- CXF发布webService服务以及客户端调用
这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...
- 客户端调用服务器端方法——ASP.NET AJAX(Atlas)、Anthem.NET和Ajax.NET Professional实现之小小比较
前几天曾经发过一篇<ASP.NET AJAX(Atlas)和Anthem.NET——管中窥豹般小小比较>,Jeffrey Zhao说用ASP.NET AJAX中的UpdatePanel似乎 ...
- SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)
1.概念:Restful 基础架构 2.具体内容 对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确的讲解,那么本次为 了清 ...
- 【Python】【Flask】前端调用后端方法返回页面
后端代码: @app.route("/test",methods=['POST','GET']) def test(): return "我是测试的" 前端代码 ...
- 【Python】【Flask】前端调用后端方法
后端代码: @app.route("/test",methods=['POST','GET']) def test(): return "我是测试的" 前端代码 ...
- asp.net javascript客户端调用服务器端方法
如何用js调用服务器端方法.首先服务器端方法的格式如下 [System.Web.Services.WebMethod] public static void serverMethod(s ...
- nginx 加工上游服务器返回的内容,并返回给客户端
禁用上游响应头部功能 Syntax: proxy_ignore_headers field ...; Default: — Context: http, server, location 功能介绍:某 ...
- 针对WebService服务,客户端调用时报序列化的最大项数maxItemsInObjectGraph超过65536问题
今天在使用webservice服务时候,报异常"The InnerException message was 'Maximum number of items that can be ser ...
- webservice 针对WebService服务,客户端调用时报序列化的最大项数maxItemsInObjectGraph超过65536问题
今天在使用webservice服务时候,报异常“The InnerException message was 'Maximum number of items that can be serializ ...
随机推荐
- MFC编程入门之二十五(常用控件:组合框控件ComboBox)
上一节讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是组合框 ...
- NotePad++常用快捷键。——Arvin
Ctrl+单键 Ctrl+C 复制 Ctrl+X 剪切 Ctrl+V 粘贴 Ctrl+Z 撤消 Ctrl+Y 恢复 Ctrl+A 全选 Ctrl+F 键查找对话框启动 Ctrl+H 查找/替换对话框 ...
- CSS3的基础用法
CSS3的现状:1.浏览器支持程度差,需要添加私有前缀 2.移动端支持优于PC端 3.不断改进中 4.应用相对广泛 在CSS3中增加新增了许多灵活查找元素的方法,极大的提高了查找元素的效率和精准度.C ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- 利用Spring中同名Bean相互覆盖的特性,定制平台的类内容。
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- AxureRP8实战手册(基础21-30)
AxureRP8实战手册(基础21-30) 本文目录 基础21. 设置元件默认选中/禁用 基础22. 设置单选按钮唯一选中 基础23. 设置元件不同状态时的样式 基础24. ...
- 20145218 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 虚拟机中分析过程 输入gcc - g example.c -o example -m32指令在64位机器上产生32位汇编,但出现以下错误: 这时需要使用sudo apt-g ...
- [C语言入门笔记]分支结构与数组
分支结构与数组 什么是分支结构? 分支结构是用户或者程序可以选择下一步执行哪个语句 分支结构有哪些? If If Else If Else If Switch 在初学者的学习过程中第一种和第二种比较普 ...
- 弹性盒布局(FlexBox)
CSS3引入了一种新的布局模式——Flexbox布局,即伸缩布局盒模型(Flexible Box),用来提供一个更加有效的方式制定.调整和分布一个容器里项目布局,即使它们的大小是未知或者动态的,这里简 ...
- php时间设置为本地
PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to ...