如何在Redis中存储和检索可序列化的Java对象



如何在Redis中存储和检索可序列化的Java对象

我想在Redis中执行两个操作

  1. 存储对象
  2. 检索它。
public boolean addToRedis(Object obj) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(out);
os.writeObject(obj);
redis.set("ObjetKey" , out.toByteArray(), Duration.ofSeconds(5000));
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
public Object getObjectFromRedis() {
try {
// thows error, also tried with redis.get('ObjetKey').toString().getBytes() (corrupted byte exception)
ByteArrayInputStream in = new ByteArrayInputStream(redis.get('ObjetKey'));
ObjectInputStream is = new ObjectInputStream(in);
return (SomeObject) is.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

您可以使用Jackson ObjectMapper将对象转换为JSON并返回。然后存储json。

的例子:

private ObjectMapper mapper;
public boolean addToRedis(String key, Object obj) {
try {
redis.set(key, mapper.writeValueAsString(obj), Duration.ofSeconds(5000));
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public <T> T getFromRedis(String key, Class<T> type) {
try {
return mapper.readValue(redis.get(key), type);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

getFromRedis方法中,使用泛型并传递type参数将使您获得所需的确切类型。

最新更新