在Java中我們通常將List存儲(chǔ)到redis中凭豪,通常有兩種方法:
-
通過(guò)Redis中的List數(shù)據(jù)類(lèi)型存儲(chǔ),其核心就是通過(guò)
opsForList()
public static void main(String[] args) { List<Student> studentsAll = new ArrayList<>(); StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); List<Student> students = new ArrayList<>(); for (Student students : students) { stringRedisTemplate.opsForList().rightPush("student", JSON.toJSONString(students)); } List<String> studentList = stringRedisTemplate.opsForList() .range("student", 0, -1); // 將redis中的數(shù)據(jù)轉(zhuǎn)換為對(duì)象集合 for (String studentString : studentList) { studentsAll.add(BeanUtils.copyProperties(studentString,Student.class)); } }
-
實(shí)際上還可以通過(guò)
ObjectMapper
方法public class JsonUtils{ private static final ObjectMapper om = createObjectMapper(); public static ObjectMapper createObjectMapper() { ObjectMapper om = new ObjectMapper(); // 反序列化時(shí)渐扮,忽略Javabean中不存在的屬性,而不是拋出異常 om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略入?yún)](méi)有任何屬性導(dǎo)致的序列化報(bào)錯(cuò) om.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); return om; } public static <T> List<T> toListOfObject(String json, Class<T> clazz, ObjectMapper om) { try { @SuppressWarnings("unchecked") Class<T[]> arrayClass = (Class<T[]>) Class .forName("[L" + clazz.getName() + ";"); return Lists.newArrayList(om.readValue(json, arrayClass)); } catch (IOException | ClassNotFoundException e) { log.error("json={}, clazz={}", json, clazz, e); throw new JsonException(e); } } }
List<Student> studentsAll = new ArrayList<>(); StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); List<Student> students = new ArrayList<>(); // 將student集合存放到redis中 stringRedisTemplate.opsForValue().set("student",JSON.toJSONString(students)); // 獲取student對(duì)象 String student = stringRedisTemplate.opsForValue().get("student"); // 解析對(duì)象 List<Student> st = JsonUtils.toListOfObject(student, Student.class);