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 ...
随机推荐
- 浅谈 原生javaScript&&react 实现全局触摸按钮(附带对addeventlistener的了解)
1.采用原生javaACript 实现全局触摸按钮 首先在控制台输出,观察事件有哪些关于触摸的字段可以使用,然后拿这些字段的数据开始来写方法. 因为要做的是全局触摸按钮,我需要拿到的是按钮时时的坐标位 ...
- unity平台的预处理
unity平台的预处理 在开发中,特别是unity的跨平台中,我们经常会在各个平台游走,如安卓版,苹果版,PC版.......在此不同的平台上,有可能我们需要做不同的操作.然而我们就可以用un ...
- spark快速大数据分析学习笔记*初始化sparkcontext(一)
初始化SparkContext 1// 在java中初始化spark import org.apache.spark.SparkConf; import org.apache.spark.api.ja ...
- 关于Cookies与Session系列一
这两个东西,最近项目操作的比较少,不过这两个在Web项目开发中一直都扮演着很重要的角色,有时有些细节会不小心就遗忘掉. Cookies 的概述 Cookies是由服务器端生成,发送给客户端,用来保存 ...
- jquery.validate:
jqueryValidation: jquery-UI 小组组长;https://jqueryvalidation.org/;从页面性能的角度来说: 最好是把js的引入放在结束的body标签上面;基本 ...
- C++ 消息中间件(MQ4CPP)
MQ4CPP支持: MultiThreading Sockets Cluster Encription Compression Service lookup Message routing 看到MQ4 ...
- 生活life
1.想办法努力挣钱,而不是如何省钱. 2.再愤怒也不大吼大叫,保持冷静. 3.喜欢的东西自己努力赚钱买. 4.少说多做,能站不坐,适当运动. 5.不要认为找个有钱男人就什么都有了.世界上年轻的女孩子, ...
- linux 使用sftp命令
1.使用SecureCRT软件进入sftp界面 2.常用的一些命令 服务器 本地 进入目录 cd lcd 查看目录结构 ...
- github改local用户名和email
github改local用户名和email 进入cd ~/.ssh 修改git config --global user.name “用户名” config --global user.email 电 ...
- 【转】PostgreSQL分布式事务配置
XA是open group提出的分布式事务处理规范,JTA支持XA规范,JTA只规定了接口,有些应用容器提供实现,也有一些三方的开源实现可用,比如Atomikos. 如果PostgreSQL参与分布式 ...