SpringBoot 整合 redis 实战

本文基于 SpringBoot,RedisTemplate API 操作 Redis 缓存,相较于Jedis客户端,RedisTemplate跟 springboot 的集成性更好,但是性能比 Jedis 差

1. 导入 spring-boot-starter-data-redis 官方依赖

    
    
        org.springframework.boot
        spring-boot-starter-data-redis
    

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 redisTemplate;
    @GetMapping(value = "/hello")
    public Map getHello(){

        Map 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 依赖

 
     org.springframework.session
     spring-session-data-redis
 

2)编写 LoginController

  前端请求:http://localhost/login?username=lisi&password=123456

@RestController
public class LoginController {
    @Resource
    RedisTemplate 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 信息

SpringBoot 整合 redis 实战_第1张图片

 

你可能感兴趣的:(SpringBoot,redis,Java,redis,spring,boot,java)