本文基于 SpringBoot,RedisTemplate API 操作 Redis 缓存,相较于Jedis客户端,RedisTemplate跟 springboot 的集成性更好,但是性能比 Jedis 差
1. 导入 spring-boot-starter-data-redis 官方依赖
<!-- spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置连接属性: application.properties
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=123456
server.port=80
3. 编写一个简单测试的 RedisController
前端发送请求:http://localhost/hello
@RestController
public class RedisController {
@Resource
RedisTemplate<String, String> redisTemplate;
@GetMapping(value = "/hello")
public Map<String,Object> getHello(){
Map<String,Object> map = new HashMap<>();
redisTemplate.opsForValue().set("name","zhangsan");
redisTemplate.opsForValue().set("age","68");
redisTemplate.expire("name",20, TimeUnit.HOURS);
map.put("name:",redisTemplate.opsForValue().get("name"));
map.put("age:",redisTemplate.opsForValue().get("age"));
return map;
}
}
3. 集成 spring session redis
传统的单机服务器的情况下,Session 直接保存在服务器上,随着架构向集群模式演进,传统的session管理不能满足高并发的需求。
例如:现在有三台 web 服务器,客户端请求被 nginx 反向代理到其中某一台上,用户本次的Session 数据就被保存到该台服务器上,如果用户下次的请求被负载到另外一台服务器上,当前服务器拿不到用户的 Session ,那么该服务器就不能返回给用户请求的数据
集群服务器共享 Session:
Spring Session 主要解决了分布式场景下 Session 共享的问题,Spring Session 可在程序中直接替换HttpSession,无需修改任何代码,能方便地与 Spring Security 集成,一般在分布式场景下,将用户会话 Session 保存在缓存中,能够给用户提供较快的 Session 验证速度
1)引入 spring session redis 依赖
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2)编写 LoginController
前端请求:http://localhost/login?username=lisi&password=123456
@RestController
public class LoginController {
@Resource
RedisTemplate<String, String> redisTemplate;
@GetMapping("/login")
public String login(String username, String password, HttpSession session){
/**
* 将用户登录信息放进 session
* spring session redis 会自动将session信息存入 redis 缓存
* */
session.setAttribute("username",username);
session.setAttribute("password",password);
String username1 = redisTemplate.opsForValue().get("username");
String password1 = redisTemplate.opsForValue().get("password");
return "登陆成功"+username1+" "+password1;
}
}
可以看到此时 redis 中已经缓存了用户的 session 信息