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 ...
随机推荐
- HTML <a> download 属性,点击链接来下载图片
Html5里面的 标签的 Download 属性可以设置一个值来规定下载文件的名称.所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件 (.img, .pdf, .txt, .html, ...
- duilib的caption上的Edit无法激活
当窗口设置标题栏时,鼠标等控件可以相应,edit无法响应. 主要和WindowImplBase::OnNcHitTest 虚函数有关. LRESULT WindowImplBase::OnNcHitT ...
- IAR #pragma vector 中断入口地址
在IAR编译器里用关键字来__interrupt来定义一个中断函数.用#pragma vector来提供中断函数的入口地址. #pragma vector = 0x12 //定时器0溢出中断入口 ...
- VMware虚拟机12安装linux系统
http://jingyan.baidu.com/article/4f7d5712d20a1b1a21192760.html 阿里云开源镜像站:http://mirrors.aliyun.com/
- Android 动画分类
一:Tween Animation 动画类型 下面先来看看Android提供的动画类型.Android的animation由四种类型组成 在XML文件中: alpha 渐变透明度动画效果 ...
- 关于启用 HTTPS 的一些经验分享(二)
转载: 关于启用 HTTPS 的一些经验分享(二) 几天前,一位朋友问我:都说推荐用 Qualys SSL Labs 这个工具测试 SSL 安全性,为什么有些安全实力很强的大厂家评分也很低?我认为这个 ...
- 解决: org.iq80.leveldb.DBException: IO error: C:\data\trie\000945.sst: Could not create random access file.
以太坊MPT树的持久化层是采用了leveldb数据库,然而在抽取MPT树代码运行过程中,进行get和write操作时却发生了错误: Caused by: org.fusesource.leveldbj ...
- mac OS.NE开发环境搭建
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入,申请备注填写姓名+技术+工作年限) Q Q:408365330 E-Mail:eg ...
- winform webbrowser flash显示
string flashSrc = "e:\\t.swf"; StringBuilder sb = new StringBuilder(); sb.Append("< ...
- lamp遇到问题
1.配置好apache和虚拟host,显示无权, 将网站目录更新755,还是不行,最后selinux: 1.设置下面即可: chcon -R -h -t httpd_sys_content_t /ho ...