SpringBoot整合系类文档之一 SpringBoot整合Redis
基于内存进行存储,支持key-value的存储形式,底层是用C语言写的。
基于key-value形式的数据字典,结构非常简单,没有数据表的概念,直接用键值对的形式完成数据的管理,支持5种数据类型:
- 字符串
- 列表
- 集合
- 有序集合
- 哈希
一、Redis安装(Windows 自行百度)
1、本地redis路径
2、环境变量配置
二、Spring Boot 整合 Redis
1、创建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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
</parent>
<groupId>com.mgx</groupId>
<artifactId>springredis001</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springredis001</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
2、创建实体类,实现序列化接口。
package com.mgx.pojo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
//实现序列化接口,否则无法存入redis
@Data
public class Student implements Serializable {
private Integer id;
private String name;
private Double score;
private Date birthday;
}
3、创建控制器
package com.mgx.controller;
import com.mgx.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Conditional;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Set;
@RestController
public class StudentHandler {
@Autowired
private RedisTemplate redisTemplate;
@PostMapping("/set")
public void set(@RequestBody Student student){
redisTemplate.opsForValue().set("student",student);
}
@GetMapping("/get/{key}")
public Student get(@PathVariable("key") String key){
return (Student) redisTemplate.opsForValue().get(key);
}
@DeleteMapping("/delete/{key}")
public boolean delete(@PathVariable("key") String key){
redisTemplate.delete(key);
return redisTemplate.hasKey(key);
}
@GetMapping("/string")
public String stringTest(){
redisTemplate.opsForValue().set("str","Hello world");
//System.out.println(redisTemplate.opsForValue().get("str"));
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.rightPush("list","java");
List<String> list = listOperations.range("list",0,2);
return list;
}
@GetMapping("/set1")
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",34);
zSetOperations.add("zset","java",3);
Set<String> set = zSetOperations.range("zset",0,2);
return set;
}
}
4、创建配置文件appliacation.yml
spring:
redis:
database: 0
host: localhost
port: 6379
5、创建启动类(注意启动路径位置 避免测试报错)
package com.mgx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Springredis001Application {
public static void main(String[] args) {
SpringApplication.run(Springredis001Application.class, args);
}
}
Redis 5种数据类型
已经在代码上增加代码,请查看。
测试代码:
1、新增数据
2、查询数据
三、遇到的问题:
redis异常解决:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist
解决方案:
1)暂时修改: (修改后已经测试)
网上搜索,很多人都给出了解决方法,但没有详细说明问题的来龙去脉,暂且记下,待有空了研究。
解决方法:通过redis-cli连接到服务器后执行以下命令:
config set stop-writes-on-bgsave-error no
如此即可。
2) 修改配置文件:
stop-writes-on-bgsave-error 改为no 也可以; (未测试)