c++与java共用memcached的问题

本文详细介绍了在不同语言环境下使用memcache时遇到的问题及解决方案,包括如何通过xmemcache实现跨语言的二进制和文本数据存取,并且在GBK编码下有效处理汉字数据。

最初使用的是danga的memcachedClient,处理单一语言对memcache的数据存储没有遇到问题,后来由于业务需要,要由C++存储数据,JAVA负责取数据。Memcache有二进制和文本两种存储方式,我们统一使用二进制,C++侧存入序列化之后的序列,我们JAVA侧取到数据后进行反序列化,这时danga的bug就暴露出来了,无法取到memcache服务器中由C++侧放入的数据。于是我们放弃danga,改用性能更高更强大的xmemcache。

         Xmemcache无需设置使用二进制还是文本方式,它会自动判断并成功存取。由于数据中存在汉字,我们统一使用GBK编码存取数据,给XMemcachedClient设置Transcoder属性即可,即

memclient.setTranscoder(new StringTranscoder("gbk"));

这样对于memcache中的二进制序列,就可以作为字符串的格式获取到,之后再进行反序列化即可。

事情并没有就此结束,我们不仅仅需要读取C++侧存入的序列,更有原本就需要自行存取的JAVA对象。使用StringTranscoder仅仅用于字符串的存取,若想要存入JAVA对象它是办不到的,会提示你要存入的这个对象无法强转为String类型。我们发现,StringTranscoder是Transcoder的一个子类,Transcoder下面还有好多其他子类。那其中应该总有一个是允许我们存取JAVA对象的吧。没错,就是它,SerializingTranscoder。不论存取的是JAVA对象还是序列化后的字节,它都能坦然应对。不过它的构造方法里不含参数,需要通过设置其charset属性来设置编码,即

SerializingTranscoder transcoder = new SerializingTranscoder();

transcoder.setCharset("GBK");

memclient.setTranscoder(transcoder);

至此,大功告成。

基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置速度的精确估计控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理实现方法;②学习如何在STM32平台上进行电机控制算法的移植优化;③为开发高性能、低成本的电机驱动系统提供技术参考实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值