SpringBoot整合Redis(RedisTemplate )

发布于:2023-07-27 ⋅ 阅读:(84) ⋅ 点赞:(0)

Spring Boot 整合Redis (一) spring-boot-starter-data-redis

SpringBoot 使用Spring Data Redis 这个框架来操作Redis

1、创建SpringBoot工程, 添加依赖

添加依赖:spring-boot-starter-data-redis

    <!--SpringBoot依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-parent</artifactId>
        <version>2.2.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- SpringBoot默认通过客户端来操作Redis,
        所以我们需要引入连接池commons-pool2-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

        <!--lombok依赖能简化实体类的开发 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

2、创建实体类

package com.Redis.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data  
public class student implements Serializable {
    //实现序列化接口Serializable,不实现,不能存进Redis
    private Integer id;
    private String name;
    private Double score;
    private Date birthday;
}

3、创建控制器

package com.Redis.controller;

import com.Redis.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class StudentHandler {
    //RedisTemplate 封装了 lettuce
    @Autowired
    private RedisTemplate redisTemplate;

    //添加一个学生对象进Redis
    @PostMapping("/set")
    //@RequestBody  把客户端传来的json数据转成对象
    public void set(@RequestBody Student student){
        //要先调用opsForValue方法,将键值对,转成对象
        redisTemplate.opsForValue().set("student",student);
    }
    
    //通过key获取Redis中的值
    @GetMapping("/get/{key}")
    //@PathVariable做映射
    public Student get(@PathVariable("key") String key){
        //get方法返回的是Object类型 , 所以要强制类型转换
        return (Student) redisTemplate.opsForValue().get(key);
    }
    
    //删除数据
    @DeleteMapping("/delete/{key}")
    public boolean delete(@PathVariable("key") String key){
        redisTemplate.delete(key);
        //判断key值是否存在,true表示存在
        return redisTemplate.hasKey(key);
    }
}

4、在resources包下创建配置文件application.yml

#spring.redis.database
spring:
  redis:
    database: 0 #0表示使用本身的数据库
    host: localhost  #ip地址
    port: 6370  #端口

5、创建启动类

package com.Redis;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

6、启动测试

1、 使用Postman来post数据进set接口
在这里插入图片描述
2、使用Postman的post请求方式, 填写json格式数据
后台拿到数据转成student对象,经过 redisTemplate.opsForValue().set(“student”,student);方法添加进redis。

在redis中使用get student 命令 会返回空 , 应为redis会给key之前添加一串字符串。使用key * 获取所有 key 。 就能知道被改成什么了
在这里插入图片描述
3、使用Postman来测试get接口
在这里插入图片描述

7、注意点

  • SpringBoot整合Redis必须引入commons-pool2spring-boot-starter-data-redis 依赖。
  • 使用RedisTemplate 对象来操作Redis。
  • 在进行get 、 set 方法之前, 必须先调用opsForValue方法。删除不用加。
    redisTemplate.opsForValue().set(“student”,student);
  • 使用SpringBoot添加数据进Redis的时候会在key前加字符串
    SpringBoot的get方法的时候,会自动在key前添加字符串。但是使用Redis查的时候要加。
  • 删除方法,不用加opsForValue方法,但是要使用hasKey方法判断还在不在

8、五种数据类型的Java操作

字符串 String
    @GetMapping("/String")
    public String stringTest(){
        redisTemplate.opsForValue().set("str","hello");
        String str = (String) redisTemplate.opsForValue().get("str");
        return str;
    }
列表 List
    @GetMapping("/list")
    public List<String> listTest(){
        //操作List列表 使用opsForList方法
        ListOperations<String,String> listOperations = redisTemplate.opsForList();
        //从左右边添加元素
        listOperations.leftPush("list","hello0");
        listOperations.leftPush("list","hello1");
        listOperations.rightPush("list","hello2");

        //截取list中从0-2的数据
        List<String> list = listOperations.range("list",0,2);
        return list;
    }
集合Set
    @GetMapping("/set")
    public Set<String> setTest(){
        SetOperations<String,String> setOperations = redisTemplate.opsForSet();
        setOperations.add("set","hel0");
        setOperations.add("set","hel0");
        setOperations.add("set","hel1");
        //获取所有key为set的值
        Set<String> set = setOperations.members("set");
        return set;
    }
有序集合Zset

ZSet与Set的区别:
Set存进去可能是乱序的
ZSet的时候附带了序号,所以是有序的

    @GetMapping("/set")
    public Set<String> zsetTest(){
        ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("set","hel0",1);
        zSetOperations.add("set","hel0",2);
        zSetOperations.add("set","hel1",3);
        //获取所有key为set的值
        Set<String> set = zSetOperations.range("zset",0,2);
        return set;
    }
哈希Hash
    @GetMapping("/hash")
    public void hashTest(){
        HashOperations<String,String,String> hashOperations = redisTemplate.opsForHash();
        hashOperations.put("key","hashkey","hello");
        String s = hashOperations.get("key", "hashkey");
        System.out.println(s);
    }
本文含有隐藏内容,请 开通VIP 后查看