JavaEE:SpringBoot整合Redis

前提:

配置SpringBoot,见此地址:

JavaEE:SpringBoot基本配置_a526001650a的专栏-CSDN博客

JavaEE:Redis集群搭建(真)_a526001650a的专栏-CSDN博客

一、配置Redis信息:

1.导入Redis依赖包,在工程/pom.xml中:

<dependencies>
    <!-- 导入redis依赖包 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
        <version>2.3.0.RELEASE</version>
    </dependency>
</dependencies>

2.配置Redis服务IP和端口(在工程/src/main/resources/application.yml中):

spring:
  redis: 
    #方式一:配置连接单台Redis服务器地址
    database: 0   #redis中数据库序号
    password: yyh12345   #Redis连接密码,没设密码可以不写
    host: 192.168.233.129  #IP地址
    port: 6379  #端口
    timeout: 5000   #超时时间,单位:毫秒
    poolMaxTotal: 100   #允许的最大连接数
    poolMaxIdle: 10    #最大空闲连接数
    poolMaxWait: -1 #最大等待时间,值小于0为没有限制

    #方式二(配置Redis哨兵):
    #database: 0              #选择第0个数据库
    #password: yyh12345       #redis密码
    #sentinel:                #配置Redis哨兵,有了此配置,不用再单独配置Redis的host+port了
      #master: mymaster       #配置master名称
      #nodes: 192.168.233.133:26379, 192.168.233.134:26379, 192.168.233.135:26379  #配置所有哨兵节点

    #方式三:配置连接Redis集群服务器地址
    #database: 0              #选择第0个数据库
    #password: yyh12345       #redis密码
    #cluster:
      #nodes: 192.168.233.133:6379, 192.168.233.136:6379,192.168.233.137:6379,192.168.233.138:6379,192.168.233.139:6379,192.168.233.140:6379

server: #当前服务端口
  port: 8080

二、创建数据存储与获取业务类:

StringRedisTemplate操作字符串类型,继承RedisTemplate。

1.使用RedisTemplate存储/获取数据:

@Component
public class RedisBiz {
    @Autowired
    private RedisTemplate<String, String> redisTemplate; //Redis数据操作类
    //从redis获取数据
    public String getValue(String key) {
        if(redisTemplate.hasKey(key)){
            return redisTemplate.boundValueOps(key).get();
            //(String) return redisTemplate.opsForValue().get(key);  //同上
        }
        return null;
    }
    //将数据存入redis
    public void setValue(String key, String value) {
        redisTemplate.boundValueOps(key).set(value);
        //return redisTemplate.opsForValue().set(key, value);  //同上
    }

    //从redis中删除数据
    public void delete(String key) {
        return redisTemplate.delete(key);
    }

    //批量查询,mget方式
    public List<Object> batchQuery1(List<String> keys) {
        return redisTemplate.opsForValue().multiGet(keys);
    }

    //批量查询,pipeline方式
    public List<Object> batchQuery2(final List<String> keys) {
        List<Object> list = redisTemplate.executePipelined(new RedisCallback<String>() {
           @Override
           public String doInRedis(RedisConnection conn) throws DataAccess {
              StringRedisConnection src = (StringRedisConnection) conn;
               for (String key: keys) {
                   src.get(key);
               }
               return null;
           }
        });
        return list;
    }

}

2.测试效果:

@Controller
public class UserController {
    @Autowired
    private RedisBiz redisBiz;
    @RequestMapping("/setValue")
    @ResponseBody
    public String setValue() {
        redisBiz.setValue("key2", "value2");
        return "成功";
    }
    @RequestMapping("/getValue")
    @ResponseBody
    public String getValue() {
        return redisBiz.getValue("key2");
    }
}

三、使用Redis存储token(分布式session):
1.使用redis存储用户token:

@PostMapping("/login")
public String login(String phone, String code, String redirectUrl, HttpServletRequest request, HttpServletResponse response) {
    //...省略验证手机号/验证码逻辑
    //1.根据手机号从库中查出用户信息
    User user = ...;
    //2.生成token,并缓存到redis+cookie中
    String token = jwtUtil.genToken(String userNo, String phone);
    user.setToken(token);
    redisTemplate.opsForValue().set("USER_" + token, gson.toJson(user));;
    Cookie c = new Cookie("USER", gson.toJson(user));
    c.setDomain("yyh.com");
    c.setPath("/");
    response.addCookie(c);
    return String.format("redirect:%s", redirectUrl);
}

2.退出登录时删除redis中token:

@PostMapping("/logout")
public String logout(HttpServletRequest request, HttpServletResponse response) {
    //...省略获取/验证token逻辑
    //1.清除redis中的token
    redisTemplate.delete("USER_" + token);
    //2.清除cookie中token
    Cookie c = new Cookie("USER", null);
    c.setDomain("yyh.com");
    c.setPath("/");
    c.setMaxAge(-1);
    response.addCookie(c);
    return "login";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值