redis在java项目中的使用
来源:互联网 发布:淘宝1688代销赚钱吗 编辑:程序博客网 时间:2024/04/29 18:00
在上一篇文章中已经讲了redis的spring配置,这篇将会描述redis在java项目中的使用。
redis存储形式都是key-value(键值对),按照存储的内容分为两种,一种是存简单数据,即数字,字符串等,可以用string-value的形式存储;另一种是存对象、集合等,最好用序列化的方式来存储。
1、存储简单数据
try { Jedis jedis = new Jedis(); jedis.set("name", "JackGSmith");} catch (Exception e) { //如果缓存连不上,则不处理 System.out.println("登录无法更新该用户缓存");}
从redis缓存中获取key为“name”的值,使用jedis.get("name"),用一个String变量接收即可。
2、存储对象、集合
存对象集合用序列化的方式存储,用反序列化的方式取值。存储的key和value都是转化成字节码的形式。
先定义一个抽象类:SerializeTranscoder.java,代码如下:
package cn.com.taiji.sample.utils;import java.io.Closeable;import java.io.IOException;public abstract class SerializeTranscoder { public abstract byte[] serialize(Object value); public abstract Object deserialize(byte[] in) throws IOException; public void close(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (Exception e) { e.printStackTrace(); } } }}
再建一个序列化的类,ObjectTranscoder.java,继承上面这个抽象类,该类是用来序列化存储对象用的,代码如下:
package cn.com.taiji.sample.utils;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class ObjectTranscoder<M extends Serializable> extends SerializeTranscoder{ @SuppressWarnings("unchecked") @Override public byte[] serialize(Object value) { if (value == null) { throw new NullPointerException("Can't serialize null"); } byte[] result = null; ByteArrayOutputStream bos = null; ObjectOutputStream os = null; try { bos = new ByteArrayOutputStream(); os = new ObjectOutputStream(bos); M m = (M) value; os.writeObject(m); os.close(); bos.close(); result = bos.toByteArray(); } catch (IOException e) { throw new IllegalArgumentException("Non-serializable object", e); } finally { close(os); close(bos); } return result; } @SuppressWarnings("unchecked") @Override public M deserialize(byte[] in) { M result = null; ByteArrayInputStream bis = null; ObjectInputStream is = null; try { if (in != null) { bis = new ByteArrayInputStream(in); is = new ObjectInputStream(bis); result = (M) is.readObject(); is.close(); bis.close(); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { close(is); close(bis); } return result; }}
接着在新建一个ListTranscoder.java文件,用来序列化存储List(集合)对象,基本同上,代码如下:
package cn.com.taiji.sample.utils;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.List;public class ListTranscoder<M extends Serializable> extends SerializeTranscoder { @SuppressWarnings("unchecked") public List<M> deserialize(byte[] in) throws IOException { List<M> list = new ArrayList<>(); ByteArrayInputStream bis = null; ObjectInputStream is = null; try { if (in != null) { bis = new ByteArrayInputStream(in); is = new ObjectInputStream(bis); while (true) { M m = (M)is.readObject(); if (m == null) { break; } list.add(m); } is.close(); bis.close(); } } catch (Exception e) { // e.printStackTrace(); } finally { is.close(); bis.close(); } return list; } @SuppressWarnings("unchecked") @Override public byte[] serialize(Object value) { if (value == null) throw new NullPointerException("Can't serialize null"); List<M> values = (List<M>) value; byte[] results = null; ByteArrayOutputStream bos = null; ObjectOutputStream os = null; try { bos = new ByteArrayOutputStream(); os = new ObjectOutputStream(bos); for (M m : values) { os.writeObject(m); } results = bos.toByteArray(); os.close(); bos.close(); } catch (IOException e) { throw new IllegalArgumentException("Non-serializable object", e); } finally { close(os); close(bos); } return results; }}
现在,就可以用序列化的方式存储对象或集合了:
try { Jedis jedis = new Jedis(); List<SystemNotice> noticeList = systemNoticeManager.listQuery(noticeQModel); if(noticeList.size()>0 && noticeList != null){ ListTranscoder<SystemNotice> listTranscoder = new ListTranscoder<SystemNotice>(); jedis.set(loginUser.getId().getBytes(), listTranscoder.serialize(noticeList)); }} catch (Exception e) { //如果缓存连不上,则不处理 System.out.println("登录无法更新该用户缓存"); }
存的key使用用户id,所以取出list就很简单了:
try { Jedis jedis = new Jedis(); byte[] list = jedis.get(loginUser.getId().getBytes()); ListTranscoder<SystemNotice> listTranscoder = new ListTranscoder<SystemNotice>(); List<SystemNotice> newList = listTranscoder.deserialize(list);try { responseJson(JsonTools.toJsonStr(newList), response); } catch (IOException e) { e.printStackTrace(); }
}
至此,redis在java项目中的使用就到此结束了。关于redis的其他命令,可以自己去百度下。
阅读全文
0 0
- redis在java项目中的使用
- redis在java项目中的使用
- redis在java项目中的使用
- redis在java项目中的使用
- redis在项目中的使用
- redis在项目中的使用
- Redis 在 Java 中的使用
- Redis在Java中的使用
- redis在java中的使用
- redis在java中的使用
- 1 redis在spring中的配置及java代码实现 2 redis在java项目中的使用
- Springdata-redis在项目中的使用
- redis缓存服务器在java中的使用
- redis在java中的使用(jedis)
- 关于redis缓存时间过期处理 ----在项目中的使用
- redis在项目中的应用
- 【Redis】Redis在实际项目中的应用
- Protobuf在java项目中的使用
- 以太坊生产网络/测试网络/私有网络
- Phoenix实现用SQL查询HBase
- Kaitou Kid
- C++ 析构函数与delete[]
- Numpy之sum函数用法
- redis在java项目中的使用
- 多列布局
- Git使用
- 2017 Multi-University Training Contest 5 &&HDU 6085 Rikka with Candies 【bitset+思维】
- HBase编程实例—HBase连接池
- 【笨鸟先飞】android重新学习日记3---识别用户行为
- Java获得项目绝对路径
- 数据库事务系列-事务模型基础
- Spring Boot使用redis做数据缓存