设为首页 收藏本站
查看: 992|回复: 0

[经验分享] Memcached中对象反序列化和json字符串用jackson解析成对象的比较

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-19 08:14:12 | 显示全部楼层 |阅读模式
如果项目已经发布,如果临时想对某个在Memcached中的key修改值,那么以对象形式存储的话,将很难修改,但如果以字符串形式存储,通过json解析成对象的话,则会方便很多,因为通过界面往Memcached 添加字符串值是很简单的。



现在来比较一下这两种方式在时间消耗方面的差异:



package bean;
import java.io.Serializable;
public class User implements Serializable{
/**
* 序列号
*/
private static final long serialVersionUID = -3896605600471191953L;
private int uid;
private String uname;
private String upass;
private String abc;
public String getAbc() {
return abc;
}
public void setAbc(String abc) {
this.abc = abc;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
}


  (1)单个Object
  把对象和json字符串放入memcached:


   User user = new User();
user.setUid(123);
user.setUname("Kingson_Wu");
user.setUpass("VIPS");
user.setAbc("acvb");
cache.set("Kingson_object", user);
// Convert object to JSON string
String Json = mapper.writeValueAsString(user);
System.out.println("Change Object to JSON String: " + Json);
//cache.set("Kingson_json", Json);
cache.set("Kingson_json", " {\"uid\":123, \"uname\":\"Kingson_Wu\",\"upass\":\"VIPS\",\"abc\":\"acvb\"}    ");


  分别从memcached取出对象和json字符串进行转化:

ObjectMapper mapper = new ObjectMapper();
long start1 = System.nanoTime();
User userObject = (User) cache.get("Kingson_object");
// System.out.println(userObject.getUid() + userObject.getUname() + userObject.getUpass());
long end1 = System.nanoTime();
System.out.println("time1:" + (end1 - start1));
long start2 = System.nanoTime();
User userJson = (User) mapper.readValue((String) cache.get("Kingson_json"), User.class);
// System.out.println(userJson.getUid() + userJson.getUname() + userJson.getUpass());
long end2 = System.nanoTime();
System.out.println("time2:" + (end2 - start2));

结果:
  123Kingson_WuVIPS

time1:14086635

123Kingson_WuVIPS

time2:39176438
  


  (2)List对象
  把对象和json字符串放入memcached:
  List<User> list=new ArrayList<>();
list.add(user);
list.add(user);
cache.set(&quot;list_Object&quot;, list);
String JsonList = mapper.writeValueAsString(list);
cache.set(&quot;list_json&quot;, JsonList);
System.out.println(JsonList);

分别从memcached取出对象和json字符串进行转化:
  long s1 = System.nanoTime();
List<User> list_Object= (List<User>)cache.get(&quot;list_Object&quot;);
//System.out.println(list_Object.size());
long e1 = System.nanoTime();
System.out.println(&quot;time1:&quot; + (e1 - s1));
long s2 = System.nanoTime();
JavaType javaType = getCollectionType(ArrayList.class, User.class);
List<User> list_json =  (List<User>)mapper.readValue((String)cache.get(&quot;list_json&quot;), javaType);
//System.out.println(list_json.size());
long e2 = System.nanoTime();
System.out.println(&quot;time2:&quot; + (e2 - s2));
    public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
ObjectMapper mapper = new ObjectMapper();
return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);   
}




结果:
  time1:1885873

time2:7717003
  


  可以看出json字符串转化的时间是对象反序列化的三倍,但是json字符串转化的方式对于扩展来说比较灵活,至于使用哪种方式,看实际需求选择。
  


  





版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140880-1-1.html 上篇帖子: Windows系统中配置Nginx+Tomcat+Memcached集群和Session共享 下篇帖子: Membase,Memcached,Couchbase1.8 C#/.NET 简单调用 操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表