c++与java共用memcached的问题
来源:互联网 发布:powerdesigner sql 编辑:程序博客网 时间:2024/05/20 08:01
最初使用的是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);
至此,大功告成。
- c++与java共用memcached的问题
- Java socket与JDBC的共用
- <C语言>结构体与联合体(共用体)的地址排布问题(内存字节对齐)
- C 结构体与共用体的用法
- C 结构体与共用体的用法
- C 结构体与共用体的用法
- C语言共用体和与结构体的区别
- 同一局域网中redflag 4.1与windows共用的问题
- Android中ScrollView与ListView共用问题的解决方案
- Android中ScrollView与ListView共用问题的解决方案
- (转)Android中ScrollView与ListView共用问题的解决方案
- winsock程序与pcap.h文件共用引起的问题
- GridView--且解决与ScrollView共用的冲突问题
- 结构体与共用体的内存分配问题
- GridView--且解决与ScrollView共用的冲突问题
- GridView--且解决与ScrollView共用的冲突问题
- Linux下的Memcached安装与JAVA客户端连接Memcached
- libmemcached一致性hash算法详解(1)----php-memcached客户端一致性哈希与crc算法共用产生的bug分析
- Exception starting filter struts2 java.lang.NullPointerException 解决方法!!!!
- android 打印内存信息
- 在Ubuntu上安装JDK 1.6
- Chrome 调试总是进入 Paused in debugger状态
- VC++6.0快捷键
- c++与java共用memcached的问题
- Eclipse的快捷键
- 通用代码高亮插件(SyntaxHighlighter)
- Android解析XML(PULL方式)
- Java程序员应该知道的10个调试技巧
- installshiled静默安装
- ibatis 中 $与#的区别
- Yii 特点
- Linux 串口读写