Memcached缓存对象需要实现Serializable接口

MemCached缓存对象需要实现Serializable接口

有时候我们需要把一些把不经常变化或者数据访问频率高的数据放在缓存中,来提高程序的访问速度。

问题及原因:

由于我之前查询数据一般返回List Map,使用mc存储方法一直没问题。但是今天我需要存储自己的对象集合例如List Log类型的数据,就会发现数据存储不了。

因为Memcached有独立的服务器端组件,是独立于应用系统的,从客户端(应用系统)保存对象到memcached是必须通过网络传输,而网络传入都是2进制数据,所以必须经过序列化,否则无法存储到Memcached服务器端的缓存中。但如果要存入java对象,那么该对象的java类是必须实现serializable接口的,serializable接口中并没有具体方法的实现,它的作用只是标识该java类是可以被序列化的。

而我之前存储的HashMap,其实底层已经实现了serializable接口。

伪代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Log implements Serializable {

private static final long serialVersionUID = 1L;
private String ip;
private String detail;
private String module;

//省略.....
}

使用:
String key = "TEST_LIST";
List<Log> logs = new ArrayList<Log>();
Log log = new Log();
log.setIp("192.168.0.1");
logs.add(log);
logs.add(log);
cacheClient.set(key, logs,new Date(60*1000));
List<Log> rs = (List<Log>) cacheClient.get(key);
-------------已经触及底线 感谢您的阅读-------------

本文标题:Memcached缓存对象需要实现Serializable接口

文章作者:趙小傑~~

发布时间:2019年07月19日 - 17:42:45

最后更新:2019年07月26日 - 23:32:12

原始链接:https://cnsyear.com/posts/2f6fb4dd.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%