Springboot Redis快速入门(最新版2.4.5)

Springboot Redis

快速入门

Redis中Object的存储方式类似于Tuple<Key,Object>

  • maven

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.erf</groupId>
        <artifactId>springboot-data-redis</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.5</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <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>
        </dependencies>
    </project>
    
  • yaml

    server:
      port: 8081
    spring:
      redis:
        database: 0
        host: localhost
        port: 6379
    
  • 实体类实现Serializable接口

    package com.erf.entity;
    
    import lombok.Data;
    
    import java.io.Serializable;
    import java.util.Date;
    
    @Data
    public class Student implements Serializable {
        private int id;
        private String name;
        private Double score;
        private Date birthday;
    
    }
    
  • 注入及使用

    package com.erf.controller;
    
    import com.erf.entity.Student;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.ValueOperations;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    public class StudentHandler {
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        @PostMapping("/set")
        public void set(@RequestBody Student student){
            redisTemplate.opsForValue().set(student.getId(),student);
        }
    
        @GetMapping("/get/{key}")
        public Student get(@PathVariable("key") String key){
            ValueOperations valueOperations = redisTemplate.opsForValue();
            Object o = valueOperations.get(key);
            Student s = (Student) o;
            return s;
        }
    
        @DeleteMapping("/delete/{key}")
        public boolean delete(@PathVariable("key") String key){
            Boolean delete = redisTemplate.delete(key);
            return delete;
        }
    
    }
    

Redis的数据类型

  • 字符串

    @GetMapping("/string")
    public String stringTest(){
        redisTemplate.opsForValue().set("str","Hello World");
        String str = (String) redisTemplate.opsForValue().get("str");
        return str;
    }
    
  • 列表

    @GetMapping("/list")
    public List<String> listTest(){
        ListOperations<String,String> listOperations = redisTemplate.opsForList();
        listOperations.leftPush("list","Hello");
        listOperations.leftPush("list","World");
        listOperations.leftPush("list","Java");
        List<String> list = listOperations.range("list",0,2);
        return list;
    }
    
  • 集合

    GetMapping("/set")
        public Set<String> setTest(){
        SetOperations<String,String> setOperations = redisTemplate.opsForSet();
        setOperations.add("set","Hello");
        setOperations.add("set","Hello");
        setOperations.add("set","World");
        setOperations.add("set","World");
        setOperations.add("set","Java");
        setOperations.add("set","Java");
        Set<String> set = setOperations.members("set");
        return set;
    }
    
  • 有序集合

    @GetMapping("/zset")
    public Set<String> zsetTest(){
        ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset","Hello",1);
        zSetOperations.add("zset","World",2);
        zSetOperations.add("zset","Java",3);
        Set<String> set = zSetOperations.range("zset",0,2);
        return set;
    }
    
  • 哈希

    @GetMapping("/hashsave")public String hashSave(){    HashOperations<String,String,String> hashOperations =        redisTemplate.opsForHash();    hashOperations.put("hashMap1","1","11");    hashOperations.put("hashMap2","1","111");    hashOperations.put("hashMap1","2","22");    hashOperations.put("hashMap2","2","222");    hashOperations.put("hashMap1","3","33");    hashOperations.put("hashMap2","3","333");    String result = (String)redisTemplate.opsForHash().get("hashMap2", "3");    System.out.println(result);    return result;}
    

持久化机制

  • AOF

    全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。

  • RDB

    • 优势

    (1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。

    (2)生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。

    (3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

    • 劣势

      ​ RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值