本文使用对象及对象链表的序列化或者转为json格式存储在redis
1.将对象序列化存储在redis,代码如下
//序列化 一个对象
public static byte [] serialize(Object obj){
ObjectOutputStream obi=null;
ByteArrayOutputStream bai=null;
try {
bai=new ByteArrayOutputStream();
obi=new ObjectOutputStream(bai);
obi.writeObject(obj);
byte[] byt=bai.toByteArray();
return byt;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//反序列化一个对象
public static Object unserizlize(byte[] byt){
ObjectInputStream oii=null;
ByteArrayInputStream bis=null;
bis=new ByteArrayInputStream(byt);
try {
oii=new ObjectInputStream(bis);
Object obj=oii.readObject();
return obj;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 序列化 list 集合
*
* @param list
* @return
*/
public static byte[] serializeList(List<?> list) {
if (list == null || list.size() == 0) {
return null;
}
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
byte[] bytes = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
for (Object obj : list) {
oos.writeObject(obj);
}
bytes = baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally {
close(oos);
close(baos);
}
return bytes;
}
/**
* 反序列化 list 集合
*
* @param lb
* @return
*/
public static List<?> unserializeList(byte[] bytes) {
if (bytes == null) {
return null;
}
List<Object> list = new ArrayList<Object>();
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
// 反序列化
bais = new ByteArrayInputStream(bytes);
ois = new ObjectInputStream(bais);
while (bais.available() > 0) {
Object obj = (Object) ois.readObject();
if (obj == null) {
break;
}
list.add(obj);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(bais);
close(ois);
}
return list;
}
/**
* 关闭io流对象
*
* @param closeable
*/
public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试类如下
public static void main(String[] args) throws Exception {
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{
"classpath:spring/ApplicationContext-dataSource.xml",
"classpath:spring/ApplicationContext-main.xml",
"classpath:spring/ApplicationContext-redis.xml"});
RedisDaoImpl redisDaoImpl=context.getBean("redisDaoImpl",RedisDaoImpl.class);
DaoSupport dao=context.getBean("daoSupport",DaoSupport.class);
Jedis jedis=redisDaoImpl.getJedis(); //获取Jedis
PageData pd=new PageData();
List<Shoping> balance_list=new ArrayList<Shoping>();
balance_list=(List<Shoping>)dao.findForList("ShopingMapper.listAll2", pd); //查询数据库获得对象列表集合
jedis.set("shop".getBytes(),serializeList(balance_list)); //序列化list集合
System.out.println("序列化的集合:"+serializeList(balance_list));
byte[] byt=jedis.get("shop".getBytes());
balance_list=new ArrayList<Shoping>();
balance_list=(List<Shoping>) unserializeList(byt); //反序列化
System.out.println("测试输出:"+balance_list);
}
控制台输出结果如下
测试输出:[Shoping [SP_NUM=20191120001, SP_SORT=保健品, SP_TITLE=42, SP_IMAGE1=release/goods/211b6056-d9e0-45e0-ae91-76fb4d579315.jpg, SP_IMAGE2=release/goods/05fab9ba-7780-4453-9406-d7f8eacbcc13.png, SP_IMAGE3=release/goods/6dd5a0b7-3611-4922-82ef-1d6c5e5e88e1.jpg, SP_IMAGE4=release/goods/7be5a20e-06f1-4a0f-a194-dc4788034281.png, SP_IMAGE5=release/goods/6e99c61f-84f6-4a2d-ac22-13429195595b.png, SP_ITEM=release/goods/624b6112-d566-482c-adc7-450a2f378e5f.jpg, SP_CPRICE=3000.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=842bb319311a49a8a9992a689b34a66d, SHELF_TIME=2019-11-20 16:29:56, SALES_VOLUME=0, SP_ARRAY=0], Shoping [SP_NUM=20191120002, SP_SORT=保健品, SP_TITLE=叶黄素酯蜂蜜制品1瓶, SP_IMAGE1=release/goods/878510eb-1d5f-4165-8a4e-d27058c8648b.jpg, SP_IMAGE2=release/goods/94a5c8c9-37b4-4d47-b703-39229b514973.jpg, SP_IMAGE3=release/goods/0f125570-1f9b-46eb-8152-c434bb36d9fa.png, SP_IMAGE4=release/goods/9efa8003-a32f-49fc-8701-c7a8468a4b65.jpg, SP_IMAGE5=release/goods/af013a50-d987-4182-888c-bc2f8c747c80.jpg, SP_ITEM=release/goods/071e8f1a-602b-413e-a09e-f40d076fa9ef.jpg, SP_CPRICE=200.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=5312e60b8d6a4712a22f57dfc66bdad7, SHELF_TIME=2019-11-20 16:32:22, SALES_VOLUME=0, SP_ARRAY=0], Shoping [SP_NUM=20191120003, SP_SORT=保健品, SP_TITLE=视动力植物饮料12瓶装, SP_IMAGE1=release/goods/6dbc5e3d-df7a-47ef-a057-c9b80db08480.jpg, SP_IMAGE2=release/goods/635daa8a-a940-45c0-8cb7-f41cf2ae0917.jpg, SP_IMAGE3=release/goods/6791eb4d-3d91-40f1-9cef-80865c3b9c49.png, SP_IMAGE4=release/goods/bf9f7708-4dfb-4df6-aa10-faa40d9be81f.jpg, SP_IMAGE5=release/goods/8e23c352-4cfb-4e2e-a3f5-e0751f676b30.jpg, SP_ITEM=release/goods/67bd40a4-263f-4e03-b865-0d413e6c844b.jpg, SP_CPRICE=120.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=edb1f2c772074b73a4b833152422c669, SHELF_TIME=2019-11-20 16:42:16, SALES_VOLUME=0, SP_ARRAY=0], Shoping [SP_NUM=20191120004, SP_SORT=保健品, SP_TITLE=视动力植物饮料20瓶装, SP_IMAGE1=release/goods/c4b10bef-c3cc-401b-8be8-9aba46676c76.jpg, SP_IMAGE2=release/goods/7403d47c-5e21-4655-9927-18b8c0bd619c.jpg, SP_IMAGE3=release/goods/e1854861-63d8-4e64-99ae-bf75e5d2f303.png, SP_IMAGE4=release/goods/2cb3ed22-72b0-4a35-b40c-3ef31461bd45.jpg, SP_IMAGE5=release/goods/ea2153c5-7ee7-422c-8b13-aa54b1ae0465.jpg, SP_ITEM=release/goods/60d4e4d5-30ee-4ac7-a672-fc45110c3a90.jpg, SP_CPRICE=200.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=246a97b9099b4c2c86410664442cad13, SHELF_TIME=2019-11-20 16:44:02, SALES_VOLUME=0, SP_ARRAY=0]]
2.将对象转为json格式存储在redis,代码如下
/**对象转为json字符串后存储
* @return
* @throws IOException
*/
public void setJsonString(String key,Object object){
Jedis jedis = getJedis();
jedis.set(key, JSON.toJSONString(object));
jedis.close();
}
/**取出json字符串转为对象
* @return
* @throws IOException
*/
public Object getJsonObject(String key,Class clazz){
Jedis jedis = getJedis();
String value = jedis.get(key);
jedis.close();
return JSON.parseObject(value,clazz);
}
/**对象链表转为json字符串后存储
* @return
* @throws IOException
*/
public void setJsonStringList(String key,List<?> list){
Jedis jedis = getJedis();
jedis.set(key, JSON.toJSONString(list));
jedis.close();
}
/**取出json字符串转为对象链表
* @return
* @throws IOException
*/
public List<?> getJsonObjectList(String key,Class clazz){
Jedis jedis = getJedis();
String value = jedis.get(key);
jedis.close();
return JSON.parseArray(value,clazz);
}
测试类如下
public static void main(String[] args) throws Exception {
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{
"classpath:spring/ApplicationContext-dataSource.xml",
"classpath:spring/ApplicationContext-main.xml",
"classpath:spring/ApplicationContext-redis.xml"});
RedisDaoImpl redisDaoImpl=context.getBean("redisDaoImpl",RedisDaoImpl.class);
DaoSupport dao=context.getBean("daoSupport",DaoSupport.class);
Jedis jedis=redisDaoImpl.getJedis(); //获取Jedis
PageData pd=new PageData();
List<Shoping> balance_list=new ArrayList<Shoping>();
balance_list=(List<Shoping>)dao.findForList("ShopingMapper.listAll2", pd); //查询数据库获得对象列表集合
List<Shoping> new_list=new ArrayList<Shoping>();
redisDaoImpl.setJsonStringList("shoplist", balance_list); //将对象链表转为json字符串
new_list=(List<Shoping>) redisDaoImpl.getJsonObjectList("shoplist", Shoping.class); //将json字符串转为对象链表
System.out.println("json字符串转为对象链表:"+new_list);
if(balance_list.size()>0){
Shoping shop=balance_list.get(0);
redisDaoImpl.setJsonString("shop", shop); //将对象转为json格式
Shoping new_shop = (Shoping)redisDaoImpl.getJsonObject("shop",Shoping.class); //将json字符串转为对象
System.out.println("将对象转为json格式后又转为对象:"+new_shop);
System.out.println("商品标题:"+new_shop.getSP_TITLE());
}
}
控制台输出结果为
json字符串转为对象链表:[Shoping [SP_NUM=20191120001, SP_SORT=保健品, SP_TITLE=42, SP_IMAGE1=release/goods/211b6056-d9e0-45e0-ae91-76fb4d579315.jpg, SP_IMAGE2=release/goods/05fab9ba-7780-4453-9406-d7f8eacbcc13.png, SP_IMAGE3=release/goods/6dd5a0b7-3611-4922-82ef-1d6c5e5e88e1.jpg, SP_IMAGE4=release/goods/7be5a20e-06f1-4a0f-a194-dc4788034281.png, SP_IMAGE5=release/goods/6e99c61f-84f6-4a2d-ac22-13429195595b.png, SP_ITEM=release/goods/624b6112-d566-482c-adc7-450a2f378e5f.jpg, SP_CPRICE=3000.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=842bb319311a49a8a9992a689b34a66d, SHELF_TIME=2019-11-20 16:29:56, SALES_VOLUME=0, SP_ARRAY=0], Shoping [SP_NUM=20191120002, SP_SORT=保健品, SP_TITLE=叶黄素酯蜂蜜制品1瓶, SP_IMAGE1=release/goods/878510eb-1d5f-4165-8a4e-d27058c8648b.jpg, SP_IMAGE2=release/goods/94a5c8c9-37b4-4d47-b703-39229b514973.jpg, SP_IMAGE3=release/goods/0f125570-1f9b-46eb-8152-c434bb36d9fa.png, SP_IMAGE4=release/goods/9efa8003-a32f-49fc-8701-c7a8468a4b65.jpg, SP_IMAGE5=release/goods/af013a50-d987-4182-888c-bc2f8c747c80.jpg, SP_ITEM=release/goods/071e8f1a-602b-413e-a09e-f40d076fa9ef.jpg, SP_CPRICE=200.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=5312e60b8d6a4712a22f57dfc66bdad7, SHELF_TIME=2019-11-20 16:32:22, SALES_VOLUME=0, SP_ARRAY=0], Shoping [SP_NUM=20191120003, SP_SORT=保健品, SP_TITLE=视动力植物饮料12瓶装, SP_IMAGE1=release/goods/6dbc5e3d-df7a-47ef-a057-c9b80db08480.jpg, SP_IMAGE2=release/goods/635daa8a-a940-45c0-8cb7-f41cf2ae0917.jpg, SP_IMAGE3=release/goods/6791eb4d-3d91-40f1-9cef-80865c3b9c49.png, SP_IMAGE4=release/goods/bf9f7708-4dfb-4df6-aa10-faa40d9be81f.jpg, SP_IMAGE5=release/goods/8e23c352-4cfb-4e2e-a3f5-e0751f676b30.jpg, SP_ITEM=release/goods/67bd40a4-263f-4e03-b865-0d413e6c844b.jpg, SP_CPRICE=120.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=edb1f2c772074b73a4b833152422c669, SHELF_TIME=2019-11-20 16:42:16, SALES_VOLUME=0, SP_ARRAY=0], Shoping [SP_NUM=20191120004, SP_SORT=保健品, SP_TITLE=视动力植物饮料20瓶装, SP_IMAGE1=release/goods/c4b10bef-c3cc-401b-8be8-9aba46676c76.jpg, SP_IMAGE2=release/goods/7403d47c-5e21-4655-9927-18b8c0bd619c.jpg, SP_IMAGE3=release/goods/e1854861-63d8-4e64-99ae-bf75e5d2f303.png, SP_IMAGE4=release/goods/2cb3ed22-72b0-4a35-b40c-3ef31461bd45.jpg, SP_IMAGE5=release/goods/ea2153c5-7ee7-422c-8b13-aa54b1ae0465.jpg, SP_ITEM=release/goods/60d4e4d5-30ee-4ac7-a672-fc45110c3a90.jpg, SP_CPRICE=200.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=246a97b9099b4c2c86410664442cad13, SHELF_TIME=2019-11-20 16:44:02, SALES_VOLUME=0, SP_ARRAY=0]]
将对象转为json格式后又转为对象:Shoping [SP_NUM=20191120001, SP_SORT=保健品, SP_TITLE=42, SP_IMAGE1=release/goods/211b6056-d9e0-45e0-ae91-76fb4d579315.jpg, SP_IMAGE2=release/goods/05fab9ba-7780-4453-9406-d7f8eacbcc13.png, SP_IMAGE3=release/goods/6dd5a0b7-3611-4922-82ef-1d6c5e5e88e1.jpg, SP_IMAGE4=release/goods/7be5a20e-06f1-4a0f-a194-dc4788034281.png, SP_IMAGE5=release/goods/6e99c61f-84f6-4a2d-ac22-13429195595b.png, SP_ITEM=release/goods/624b6112-d566-482c-adc7-450a2f378e5f.jpg, SP_CPRICE=3000.0, SP_OPRICE=0.0, SP_STOCK=0, BUY_MODE=2, AUCTION=2, AUCTION_NUM=0, AUTOMATIC=0, AUCTION_STATUS=3, SP_STATUS=1, SHOPING_ID=842bb319311a49a8a9992a689b34a66d, SHELF_TIME=2019-11-20 16:29:56, SALES_VOLUME=0, SP_ARRAY=0]