目录
SpringBoot集成Redis
1.添加 redis 依赖
或将以下配置添加到 pom.xml 中:
2.配置 redis
3.手动操作 redis
@RestController
public class RedisController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
// 在 redis 存储数据 30s之后自动失效
@RequestMapping("/set")
public String set(String name, String value) {
stringRedisTemplate.opsForValue().set(name, value, 30, TimeUnit.SECONDS);
return "Set redis success.";
}
// 读取 redis 中的数据
@RequestMapping("/get")
public String get(String name) {
Object valObj = stringRedisTemplate.opsForValue().get(name);
if (valObj != null) {
return valObj.toString();
}
return "Null";
}
}
通过postman发送请求测试:
下面测试存入字典(Hash)类型:
// 在 redis 存储数据
@RequestMapping("/set2")
public String set2() {
stringRedisTemplate.opsForHash().put("myhash","name","ws");
return "Set redis success.";
}
// 读取 redis 中的数据
@RequestMapping("/get2")
public String get2() {
Object valObj = stringRedisTemplate.opsForHash().get("myhash", "name");
if (valObj != null) {
return valObj.toString();
}
return "Null";
}
Session持久化存储到Redis
1.添加依赖
或者在pom.xml中引入:
2.修改redis配置
3.存储和读取String类型的代码
@RestController
@RequestMapping("/user")
public class UserController {
// user session key
private static final String SESSION_KEY_USERINFO = "SESSION_KEY_USERINFO";
@RequestMapping("/set")
public String set(HttpSession session) {
session.setAttribute(SESSION_KEY_USERINFO, "ws");
return "ok";
}
@RequestMapping("/get")
public String get(HttpServletRequest request) {
HttpSession session = request.getSession(false);
Object userObj = null;
if (session != null && (userObj = session.getAttribute(SESSION_KEY_USERINFO)) != null) {
return (String) userObj;
}
return "Null";
}
}
通过postman进行测试:
4.存储和读取对象类型的代码
实体类:
@Data
public class UserInfo {
private int id;
private String username;
private int age;
}
controller类:
@RestController
@RequestMapping("/user")
public class UserController {
// user session key
private static final String SESSION_KEY_USERINFO = "SESSION_KEY_USERINFO";
@RequestMapping("/set")
public String set(HttpSession session) {
//...经过一系列的判断
UserInfo userInfo = new UserInfo();
userInfo.setId(1);
userInfo.setUsername("ws");
userInfo.setAge(18);
session.setAttribute(SESSION_KEY_USERINFO, userInfo);
return "ok";
}
@RequestMapping("/get")
public UserInfo get(HttpServletRequest request) {
HttpSession session = request.getSession(false);
Object userObj = null;
if (session != null && (userObj = session.getAttribute(SESSION_KEY_USERINFO)) != null) {
return (UserInfo) userObj;
}
return null;
}
}
通过postman测试:发现是序列化的问题
解决方案:
设置生成序列化版本号:
在类上面ALT+ENTER:
再次测试:
5.序列化细节
再测试下:
什么时候用static和transient?