首页 新闻 搜索 专区 学院

memcache java 客户端与c#客户端 数据不一致问题

0
悬赏园豆:30 [已解决问题] 解决于 2018-06-07 17:27

使用 memcache 

我在.net 里使用 enyim.caching 缓存。

在java 里使用  spymemcached 读取 不到,但是控制台都可以看到。

后来了解到,每个memcache  有一个flag,不同的客户端 不同。

我修改了 .net enyim.caching 里的源码,flag直接设置成32,java就可以获取了。

但是修改源码感觉不好。后来咨询阿里的,说是因为序列化的问题,说要要用string 开头的接口去读取,但是java刚入门,没太懂。

不知道有没有哪个遇到过这样的情况,

2J的主页 2J | 初学一级 | 园豆:129
提问于:2018-05-28 09:48
< >
分享
最佳答案
0

一个变通的稍微牺牲一些效率的方法:C#中将变量值序列化为json字符串后写入缓存,Java中从缓存读取json字符串后反序列化

收获园豆:30
dudu | 高人七级 |园豆:37751 | 2018-05-28 10:14

c# 我直接缓存的是string.不是写的对像

2J | 园豆:129 (初学一级) | 2018-05-28 10:46

@2J: 你把哪个flag改为了32?

dudu | 园豆:37751 (高人七级) | 2018-05-28 11:08

@dudu:   enyim.caching 中 cacheitem 中有一个有一个参数  flags  ,原来是 (uint)((int)code | 0x0100);  其中  string 的code 是18

2J | 园豆:129 (初学一级) | 2018-05-28 11:12

@2J: EnyimMemcached中使用值为18的TypeCode表示字符串类型,SpyMemcached中使用32表示字符串类型,反序列化时需要根据这个Flag确定反序列化为哪个类型的实例

dudu | 园豆:37751 (高人七级) | 2018-05-28 11:34

@dudu: 您知道在java里,如何处理吗?我感觉修改了   enyim.caching的源码,非常失落。我也不能去修改 SpyMemcached的源码。

2J | 园豆:129 (初学一级) | 2018-05-28 11:49

@2J: 之前弄错了,SpyMemcached 中 String 是默认反序列化类型,没有对应的 Flag,详见 SerializingTranscoder.java

dudu | 园豆:37751 (高人七级) | 2018-05-28 14:57

@dudu: 

如果这样之间反序列化应该没问题吧

2J | 园豆:129 (初学一级) | 2018-05-29 07:00

@dudu: 谢谢你哈,我也去看下spymemcache的源码看下

2J | 园豆:129 (初学一级) | 2018-05-29 08:14

@dudu: 我自己再写了一个  SerializingTranscoder 自己实现 解码就可以了。

2J | 园豆:129 (初学一级) | 2018-06-07 17:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册