イルカエルフ:https : //mgo.whhtjl.com
今日、memcachedを使用してList <bean>にアクセスしたときに問題が発生しました。Stringの保存は正常でしたが、Beanの保存に失敗しました。インターネット上でさまざまな情報を見つけました。memcachedがList <bean>を保存できないと言う人もいます。一部の人々はHashMapを使用すると言います。私が見つけた最後の解決策は、fastjsonを使用してList <bean>をシリアル化し、それをmemcachedに格納し、取り出したときに逆シリアル化することです。成功しました。具体的な実装:
1. fastjsonのjarパッケージをダウンロードします。最新のfastjson-1.1.28.jarを使用します
2.保存されたコードをシリアル化する
package com.ltf.cache;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.ltf.entity.Course;
/**
* 缓存工具类
* @author xhz
*
*/
public class CacheUtil {
private static MemCache memCache = MemCache.getInstance();
public CacheUtil() {
}
public static boolean isArrayList(Object obj) {
if(obj==null) {
return false;
}else if(obj.getClass().getSimpleName().equals("ArrayList")) {
return true;
}
return false;
}
/**
* 存值
* @param key
* @param value
*/
public static void set(String key, Object value) {
try {
if(isArrayList(value)) {
memCache.set(key,JSON.toJSONString(value));
}else {
memCache.set(key,value);
}
} catch (Exception var3) {
var3.printStackTrace();
}
}
/**
* 根据key取值 仅供ArrayList使用
* @param key
* @return
*/
public static <T> List<T> get(String key,Class<T> clazz) {
try {
if(memCache.get(key)==null)
return null;
return JSON.parseArray(memCache.get(key).toString(),clazz);
} catch (Exception var2) {
var2.printStackTrace();
}
return null;
}
}
3.逆シリアル化して取り出す
public static void main(String[] args) {
List<Course> test=new ArrayList<Course>();
Course log1 = new Course();
log1.setCourseName("test");
log1.setDescribe("测试描述");
test.add(log1);
Course log2 = new Course();
log2.setCourseName("test2");
log2.setDescribe("测试描述2");
test.add(log2);
CacheUtil.set("tetttt", test);
List<Course> list=CacheUtil.get("tetttt",Course.class);
for (Course course : list) {
System.out.println(course);
}
}
了解しました。