【redis】SpringBoot集成redis

1.添加redis依赖

方法①:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

方法②:

使用快速面板添加:
在这里插入图片描述

2.配置redis

application.properties配置:

注意:使用本机进行远程连接redis之后,IP地址才能填本机,否则填服务器IP

#数据库索引
spring.redis.database=1
#端⼝号
spring.redis.port=6379
#IP
spring.redis.host=127.0.0.1
#连接池最⼩空闲连接数
spring.redis.lettuce.pool.min-idle=5
#连接池最⼤空闲连接数
spring.redis.lettuce.pool.max-idle=10
#连接池最⼤连接数
spring.redis.lettuce.pool.max-active=8
#最⼤等待时间
spring.redis.lettuce.pool.max-wait=1ms

application.yml配置:

spring:
  redis:
    database: 1
    port: 6379
    host: 127.0.0.1

3.操作redis

redis命令官网:redis

引⼊Spring提供的模板类:

    @Autowired
    private RedisTemplate stringRedisTemplate;

3.1 操作string

    @RequestMapping("/setStr")
    public String setStr(String key,String value){
        //参数校验
        if(!StringUtils.hasLength(key) ||!StringUtils.hasLength(value)){
            return "failed";
        }
        stringRedisTemplate.opsForValue().set(key,value);
        return "seccess";
    }

3.1 操作其它数据类型

        //hash
        stringRedisTemplate.opsForHash().put("hashKey","k1","v1");
        stringRedisTemplate.opsForHash().put("hashKey","k2","v2");
        //list
        stringRedisTemplate.opsForList().leftPush("listKey","l1");
        stringRedisTemplate.opsForList().leftPush("listKey","l2");

        //set
        stringRedisTemplate.opsForSet().add("setKey","s1","s2","s3");
        //zset
        stringRedisTemplate.opsForZSet().add("zsetKey","z1",80);
        stringRedisTemplate.opsForZSet().add("zsetKey","z2",90);
        stringRedisTemplate.opsForZSet().add("zsetKey","z3",10);

4. Spring-Session基于Redis解决共享Session问题

4.1 问题提出

Session的必要性

Http协议是⽆状态的,这样对于服务端来说,没有办法区分是新的访客还是旧的访客。但是,有些业务场景,需要追踪⽤户多个请求,此时就需要Session.

session信息不同步问题

⼀个Web应⽤, 可能部署在不同的服务器上, 通过Nginx等进⾏负载均衡. 此时,来⾃同⼀个⽤户的Http请求就会被分发到不同的服务器上. 这样就会出现Session信息不同步的问题.当⽤户刷新⼀次访问是可能会发现需要重新登录,这个问题是⽤户⽆法容忍的。

redis解决问题

为了解决这个问题,可以使⽤ Redis 将⽤户的 Session 信息进⾏集中管理,如下 图所示,在这种模式下,只要保证 Redis是⾼可⽤和可扩展性的,⽆论⽤户被均 衡到哪台 Web 服务器上,都集中从 Redis 中查询、更新 Session 信息。

在这里插入图片描述

Spring也给我们提供了共享Session的解决⽅案, 也就是Spring-Session.接下来看看Spring-Session 基于Redis如何来解决共享Session的问题

4.1 添加依赖

<dependency>
 	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
 	<groupId>org.springframework.session</groupId>
 	<artifactId>spring-session-data-redis</artifactId>
</dependency>

4.2 修改配置

application.yml:

spring:
  redis:
    database: 1
    port: 6379
    host: 127.0.0.1
  session:
    store-type: redis
    redis:
      flush-mode: on_save
      namespace: spring1:session
server:
  servlet:
    session:
      timeout: 30m

4.3 存储和读取

建一个内部类User。
模拟存取session。

@RequestMapping("/session")
@RestController
public class SessionController {
    @RequestMapping("/login")
    public String login(String name, Integer age, HttpSession session) throws JsonProcessingException {
        //模拟,不登录, 只存session
        User user = new User();
        user.setName(name);
        user.setAge(age);
        ObjectMapper mapper = new ObjectMapper();
        session.setAttribute("user_session",mapper.writeValueAsString(user));
        return "success";
    }

    @RequestMapping("/getSess")
    public String getSess(HttpServletRequest request){
        HttpSession session = request.getSession(false);
        if (session!=null && session.getAttribute("user_session")!=null){
            return (String) session.getAttribute("user_session");
        }
        return null;
    }


}
@Data
class User{
    private String name;
    private Integer age;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值