一、概述
redis是一种key-value形式的NoSQL内存数据库,它最大的特性就是将所有的数据都存储在内存中,所以读写速度快、性能好,它也支持将内存中的数据持久化到硬盘中,这样就不怕数据会丢失,兼顾性能和安全。
二、环境搭建
1.安装Redis-省略
2.核心命令和文件
redis-server:服务端程序
redis-cli:客户端程序
redis-benchmark:基准性能测试
redis.conf:redis配置文件
3.启动Redis
进入Redis安装目录,执行如下命令:
redis-server redis.windows.conf
或者直接点击redis-server.exe启动。
4.连接Redis
运行Redis目录下的redis-cli命令来连接Redis服务
连接后使用ping命令测试联通性。PONG表示连接Redis成功。
再进行以下比较简单的key-value操作,参考命令如下:
设置值和查询值都没有问题,说明连接和操作都正常了。
5.关闭Redis
在redis-cli窗口下使用shutdown命令关闭Redis。参考命令如下:
使用shutdown命令后,重新ping后,没有响应,Redis成功关闭。
三、SpringBoot集成Redis
1.添加依赖
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2.配置文件修改
在application.properties文件中添加Redis的相关配置,如果没有设置也可以使用Redis的默认配置
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.database=0
3.使用的模板
自动配置类中注册了两个默认的Redis模板:RedisTemplate和StringRedisTemplate,这两个模板都可以直接注入使用。
StringRedisTemplate继承自RedisTemplate,只能处理<String,String>的泛型数据,而RedisTemplate可以处理<Object,Object>所有泛型数据。
StringRedisTemplate默认使用StringRedisSerializer序列化器,RedisTemplate默认使用JDK自带的序列化器。
模板有很多通用的操作接口,用于对特定的数据类型或某些键进行操作,常用的接口如下表所示:
接口 | 描述 |
GeoOperations | 地理空间操作 |
HashOperations | 散列类型操作 |
ListOperations | 列表操作 |
SetOperations | 集合操作 |
ValueOperations | 字符串操作 |
ZSetOperations | 有序集合操作 |
HyperLogLogOperations | HyperLogLog类型操作 |
4.测试
a.测试字符串
示例代码如下:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
@SpringBootTest
class MySpringBootApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 设置值
*/
@Test
void set() {
stringRedisTemplate.opsForValue().set("name","lisi");
}
/**
* 取值
*/
@Test
void get(){
String name = stringRedisTemplate.opsForValue().get("name");
// 输出 lisi
System.out.println(name);
}
}
我们在执行set单元测试后,我们通过redis-cli查看数据。
我们看到已经获取到了设置的redis数据。
Redis也可以保存List对象数据,这在一些页面的数据列表访问的时候用得到,可以把数据列表做为缓存存下来,设置定时过期的时间,存在缓存就使用缓存的数据,如果没有缓存数据才访问数据库,这样可以大大提升系统运行的效率。
b.测试List对象
示例代码如下:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author qx
* @date 2023/06/18
* @desc 实体
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Long id;
private String name;
private Integer age;
}
import com.alibaba.fastjson.JSON;
import com.example.myspringboot.bean.Student;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @author qx
* @date 2023/06/18
* @desc
*/
@RequiredArgsConstructor
@RestController
public class RedisController {
private final StringRedisTemplate stringRedisTemplate;
/**
* 设置redis数据
*
* @param name key值
*/
@GetMapping("/redis/set")
public String set(@RequestParam("name") String name) {
ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
Student student1 = new Student(1L, "aa", 28);
Student student2 = new Student(2L, "bb", 26);
List<Student> studentList = new ArrayList<>();
studentList.add(student1);
studentList.add(student2);
// 使用FastJson把列表数据转成Json字符串存储
String jsonString = JSON.toJSONString(studentList);
valueOperations.set(name, jsonString);
return "保存成功";
}
/**
* 获取Redis数据
*
* @param name key值
*/
@GetMapping("/redis/get")
public List<Student> get(@RequestParam("name") String name) {
ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
String json = valueOperations.get(name);
return JSON.parseArray(json, Student.class);
}
}
测试如下:
成功把我们的列表数据保存到了Redis,也通过方法获取到了Redis数据。