使用 memcache
我在.net 里使用 enyim.caching 缓存。
在java 里使用 spymemcached 读取 不到,但是控制台都可以看到。
后来了解到,每个memcache 有一个flag,不同的客户端 不同。
我修改了 .net enyim.caching 里的源码,flag直接设置成32,java就可以获取了。
但是修改源码感觉不好。后来咨询阿里的,说是因为序列化的问题,说要要用string 开头的接口去读取,但是java刚入门,没太懂。
不知道有没有哪个遇到过这样的情况,
一个变通的稍微牺牲一些效率的方法:C#中将变量值序列化为json字符串后写入缓存,Java中从缓存读取json字符串后反序列化
c# 我直接缓存的是string.不是写的对像
@2J: 你把哪个flag改为了32?
@dudu: enyim.caching 中 cacheitem 中有一个有一个参数 flags ,原来是 (uint)((int)code | 0x0100); 其中 string 的code 是18
@2J: EnyimMemcached中使用值为18的TypeCode表示字符串类型,SpyMemcached中使用32表示字符串类型,反序列化时需要根据这个Flag确定反序列化为哪个类型的实例
@dudu: 您知道在java里,如何处理吗?我感觉修改了 enyim.caching的源码,非常失落。我也不能去修改 SpyMemcached的源码。
@2J: 之前弄错了,SpyMemcached 中 String 是默认反序列化类型,没有对应的 Flag,详见 SerializingTranscoder.java
@dudu:
如果这样之间反序列化应该没问题吧
@dudu: 谢谢你哈,我也去看下spymemcache的源码看下
@dudu: 我自己再写了一个 SerializingTranscoder 自己实现 解码就可以了。