SpringBoot集成Redis简单入门

Redis

  • 基于内存进行存储,支持key-value的存储形式,底层使用C语言编写。
  • 基于key-value形式的数据字典,结构非常简单,没有数据表的概念,直接用键值对的形式完成数据的管理。
  • Redis支持5种数据类型(这里的数据类型与Java种的数据类型并不是对应的):
    • 字符串
    • 列表
    • 集合
    • 有序集合
    • 哈希

安装

官方网站

这里使用的免安装版本的。安装版本的比较不方便,注意redis官方不支持win版本,但是有第三方提供。

启动Redis

  1. 这是win启动redis服务的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存失败,源站可能有防盗链机制,建议将图片保存下来直接上传上传(im5fI-CFuH1v-1586778056223)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413144338440.png)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413144338440.png)]
​ 双击打开,这样就成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2vMrB3PK-1586778056226)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413144811416.png)]

  1. 这是win启动redis客户端的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ASDMjKuL-1586778056228)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413144946044.png)]

​ 双击启动后,这样就成功了,注意先启动redis服务,后启动客户端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0XeUy2sN-1586778056229)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413145017737.png)]

  1. 在这个窗口就可以操作redis数据库了。

  2. 对数据库进行操作

    存:set key value
    取:get key
    

Spring Boot 整合Redis

  • 操作Redis的方式有很多种
  • 在SpringBoot整合Redis,实际上操作Redis的是SpringData Redis或者jedis框架。
  1. 首先构建Springboot项目,这里可以使用maven自己构建maven工程,也可以使用IDEA提供的脚手架快速构建

    下面是所需依赖

     <parent>
            <groupId>org.springframework.boot</groupId>
            <version>2.2.5.RELEASE</version>
            <artifactId>spring-boot-starter-parent</artifactId>
        </parent>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    <!--        整合redis-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
    <!--            客户端连接池-->
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
        </dependencies>
    
  2. 创建实体类,注意必须要实现序列化接口

    /*
     * @description: 想要存到redis数据库中,必须要实现序列化接口
     * @author: wdhcr
     * @dateTime: 2020/4/13 15:27
     */
    @Data
    public class Student implements Serializable {
    
        private Integer id;
        private String name;
        private Double score;
        private Date birthday;
    
    }
    
  3. 创建控制器

    @RestController
    public class StudentController {
    
        /*
         * @description: 自动创建实例化,操作redis数据库
         * @author: wdhcr
         * @dateTime: 2020/4/13 15:33
         */
        @Autowired
        private RedisTemplate redisTemplate;
    
        @PostMapping("/setStudent")
        public void setStudent(@RequestBody Student student) {
            /*ValueOperations<K, V>将redis中的key-value封装成一个对象,我们之就只需要操作这个对象即可
            *  public ValueOperations<K, V> opsForValue() {
                 return this.valueOps;
                }
            * */
            redisTemplate.opsForValue().set("student", student);
    
        }
    }
    
  4. 创建application.yml配置文件

    spring:
      redis:
        database: 0
        host: localhost
        port: 6379
    
  5. 创建启动类,位置要在controller的上一层

    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class,args);
        }
    }
    
  6. 启动springboot项目

  7. 接下来使用postman工具发送一条数据

    • 注意发送json数据要在请求头携带数据类型,如下:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yx1Oi71G-1586778056231)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413155923793.png)]

    • 使用post请求发送数据

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpNWflEh-1586778056232)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413160008022.png)]

  8. 当后端没有报错时,证明保存成功了 。

  9. 当我们开心的使用redis客户端进行~get student~时发现

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZ0hskGU-1586778056233)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413160200055.png)]

    原因:

    • 这是因为redis在存的时候自动的对key值进行了序列化的操作,当存的时候会在student前面追加一些字符串。

    • 可以使用 keys *student 查看它存入后的名字,可以看到在student前面追加了一些字符串。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxsqGmbB-1586778056234)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413174322229.png)]

    • 我们可以试着用查出来的名字get一下

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jj5GvoUZ-1586778056235)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413175947236.png)]

      可以看到获取到了,且它的每个属性前面都追加了字符串,redis把对象序列化成这样存到内存中。不用担心,我们在取的时候他会自动反序列化回来。

  10. 编写获取student对象的代码

     @GetMapping("/get/{key}")
        public Student getStudent(@PathVariable("key") String key){
            return (Student) redisTemplate.opsForValue().get(key);
        }
    

    在使用postman发送请求

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UkPzLePI-1586778056236)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413182253147.png)]

    我们可以看到,又将student对象原封不动的取出来了。

  11. 到这里我们来验证一下上面说过了实体类必须实现序列化接口,我们把Serializable接口去掉再发送请求就会报错,如下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rtQKv0du-1586778056237)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413182802511.png)]

​ 在我们取值时就会报错Failed to deserialize payload,无法进行反序列化。

  1. 接下来编写删除操作的控制器

    /*
         * @description: 根据key删除值
         * @params: [key]
         * @return: boolean
         * @author: wdhcr
         * @dateTime: 2020/4/13 18:34
         */
        @DeleteMapping("/delete/{key}")
        public boolean delete(@PathVariable("key") String key){
            return redisTemplate.delete(key);
        }
    

    当返回true时,表示删除成功。

    我们使用postman工具发送删除请求

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UUKpFBf8-1586778056238)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413183755473.png)]

    我们发送一次获取请求

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMZEAXUf-1586778056239)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413183849935.png)]

    可以看到获取不到了

  2. 以上就是Springboot整合Redis的增删改查操作

Redis的五种数据类型

  1. 字符串

    字符串的存取比较简单直接上代码

     /*
         * @description: redis存取字符串或object
         * @params: []
         * @return: java.lang.String
         * @author: wdhcr
         * @dateTime: 2020/4/13 18:51
         */
        @GetMapping("/string")
        public String stringType(){
            //存,存string或object类型数据时使用opsForValue()
            redisTemplate.opsForValue().set("string","hello word!");
            //取
            return (String) redisTemplate.opsForValue().get("string");
        }
    
  2. 列表

     /*
         * @description: redis存取列表数据
         * @params: []
         * @return: java.util.List
         * @author: wdhcr
         * @dateTime: 2020/4/13 19:02
         */
        @GetMapping("/list")
        public List listType(){
            /*ListOperations是框架为我们封装好的操作list数据的实例化接口
            * public ListOperations<K, V> opsForList() {
                    return this.listOps;
                }
            *
            *
            * listOperations可从左边存取,也可从右边存取
            *
            * */
            ListOperations listOperations = redisTemplate.opsForList();
            //存
            listOperations.leftPush("list","hello word");
            listOperations.leftPush("list","你好 世界!");
            listOperations.leftPush("list","Java!");
            //取 根据key ,起始下标,结束下表
            List<String> list = listOperations.range("list", 0, 2);
            return list;
        }
    

    结果:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9s9iUI71-1586778056240)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413192536602.png)]

  3. 集合

     /*
         * @description: redis存取集合数据
         * @params: []
         * @return: java.util.Set<java.lang.String>
         * @author: wdhcr
         * @dateTime: 2020/4/13 19:04
         */
        @GetMapping("/set")
        public Set<String> setType(){
            SetOperations setOperations = redisTemplate.opsForSet();
            //set会自动去重数据。
            setOperations.add("set","hello");
            setOperations.add("set","hello");
            setOperations.add("set","word");
            setOperations.add("set","word");
            setOperations.add("set","java");
            Set set = setOperations.members("set");
            return set;
        }
    

    结果:set会自动去重

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s0gM9JKT-1586778056241)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413192605388.png)]

  4. 有序集合

    /*
     * @description: redis存取有序集合数据
     * @params: []
     * @return: java.util.Set<java.lang.String>
     * @author: wdhcr
     * @dateTime: 2020/4/13 19:06
     */
    @GetMapping("/zset")
    public Set<String> zsetType(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //set会自动去重数据。
        zSetOperations.add("zset","hello",1);
        zSetOperations.add("zset","hello",2);
        zSetOperations.add("zset","word",3);
        zSetOperations.add("zset","word",4);
        zSetOperations.add("zset","java",5);
        //key 起始,到结束
        Set set = zSetOperations.range("zset",0,5);
        return set;
    }
    

    结果:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yhhpySBF-1586778056242)(C:\Users\cr\AppData\Roaming\Typora\typora-user-images\image-20200413192643769.png)]

  5. 哈希

    • 这里的哈希和Java中的哈希不太一样

      • Java中的hashMap 格式:key,value;
      • HashOperations 格式:key,hashkey(描述value的key),value;

      key是每组数据的id,hashkey就相当于hashmap中的key,是对value值的描述举个例子:age:123这个hashkey就是值age,value指123

     /*
         * @description: redis对哈希的存取
         * @params: []
         * @return: void
         * @author: wdhcr
         * @dateTime: 2020/4/13 19:21
         */
        @GetMapping("/hash")
        public void hashType(){
            HashOperations hashOperations = redisTemplate.opsForHash();
            hashOperations.put("key","name","张三");
            System.out.println(hashOperations.get("key","name"));
    
        }
    
    

    以上就是对Redis的简单入门使用方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值