一、存储和取回字符串类型 (String)
推荐存储方式:
- 存储:
redisService.set(finalKey, value) - 取回:
redisService.get(finalKey)
对于字符串类型数据,Redis 本身就能直接存储,无需任何额外的序列化/反序列化步骤。
二、存储和取回 List<T> 类型(泛型 List)
推荐存储方式:
- 存储: 将
List序列化为 JSON 字符串后,使用redisService.set(finalKey, json)存储。 - 取回: 从 Redis 中获取 JSON 字符串后,反序列化为
List<T>对象,使用redisService.get(finalKey)获取字符串,然后用JSON.parseArray或Jackson等工具反序列化。
示例:
// 存储 List
List<String> list = Arrays.asList("item1", "item2", "item3");
String json = JSON.toJSONString(list); // 使用 FastJSON 序列化为 JSON 字符串
redisService.set(finalKey, json);
// 取回 List
String jsonString = redisService.get(finalKey);
List<String> listFromRedis = JSON.parseArray(jsonString, String.class);
三、存储和取回 Page<T> 类型(分页对象)
Page 对象通常是由框架(如 Spring Data)生成的,它包含了分页信息(如页码、总数等),以及当前页的数据。你可以像 List<T> 一样处理它,将 Page 序列化为 JSON 字符串存储,取回时再反序列化为 Page<T>。
推荐存储方式:
- 存储: 将
Page<T>序列化为 JSON 字符串后存储。 - 取回: 从 Redis 中获取 JSON 字符串后,使用
JSON.parseObject()或Jackson反序列化为Page<T>对象。
示例:
// 假设 pageInfo 是一个 Page 类型的对象
Page<String> pageInfo = new PageImpl<>(Arrays.asList("item1", "item2"), PageRequest.of(0, 10), 2);
String json = JSON.toJSONString(pageInfo); // 将 Page 序列化为 JSON 字符串
redisService.set(finalKey, json);
// 取回并反序列化为 Page
String jsonString = redisService.get(finalKey);
Page<String> pageFromRedis = JSON.parseObject(jsonString, new TypeReference<Page<String>>() {});
四、存储和取回 Java Bean(类对象)
推荐存储方式:
- 存储: 将 Java Bean 对象序列化为 JSON 字符串后存储。
- 取回: 使用 JSON 反序列化将字符串转换回相应的 Java Bean 对象。
示例:
// 定义一个 Java Bean 类
public class User {
private String name;
private int age;
// Getter and Setter
}
// 存储 Java Bean
User user = new User();
user.setName("John");
user.setAge(30);
String json = JSON.toJSONString(user); // 将 User 对象序列化为 JSON 字符串
redisService.set(finalKey, json);
// 取回并反序列化为 Java Bean
String jsonString = redisService.get(finalKey);
User userFromRedis = JSON.parseObject(jsonString, User.class);
五、存储和取回复杂对象(如嵌套类、嵌套泛型等)
对于嵌套复杂对象(比如类中有 List、Map、Page 等复杂数据结构),你依然可以采用将对象序列化为 JSON 字符串的方式来存储。注意,在反序列化时,必须确保泛型类型信息正确。
示例:
public class UserWithFriends {
private String name;
private List<String> friends;
// Getter and Setter
}
// 存储复杂对象
UserWithFriends user = new UserWithFriends();
user.setName("John");
user.setFriends(Arrays.asList("Alice", "Bob"));
String json = JSON.toJSONString(user); // 将对象序列化为 JSON 字符串
redisService.set(finalKey, json);
// 取回并反序列化为复杂对象
String jsonString = redisService.get(finalKey);
UserWithFriends userFromRedis = JSON.parseObject(jsonString, UserWithFriends.class);
六、Redis 序列化方式对比:使用 setObject 和 getObject
redisService.setObject 和 redisService.getObject 是一些 Redis 客户端实现的扩展方法,通常用于简化序列化/反序列化的操作。这些方法将对象直接序列化为字节数组存储,取回时会自动反序列化成原始对象。
使用 setObject 和 getObject 的优点:
- 简化序列化操作,不需要手动将对象转为 JSON 字符串。
- 对于简单对象,
setObject和getObject是比较方便的方式。
示例:
// 存储对象
User user = new User();
user.setName("John");
user.setAge(30);
redisService.setObject(finalKey, user); // 自动序列化
// 取回对象
User userFromRedis = redisService.getObject(finalKey, User.class); // 自动反序列化
七、总结:各种存储方式的选择
- 字符串 (
String):直接使用redisService.set(finalKey, value)和redisService.get(finalKey)存取,不需要序列化。 - 泛型
List<T>、Page<T>、复杂对象:通过 JSON 序列化和反序列化来存取,使用JSON.toJSONString()存储,使用JSON.parseObject()或JSON.parseArray()取回。可以使用redisService.set(finalKey, json)和redisService.get(finalKey)存取。 - Java Bean(简单对象):可以直接用 JSON 序列化
JSON.toJSONString()和JSON.parseObject()。 - 复杂对象(如嵌套类、泛型等):使用
TypeReference和JSON进行复杂类型的序列化和反序列化。
2617

被折叠的 条评论
为什么被折叠?



