SpringBoot整合Redis
Redis 简介
基于内存进行存储,支持key-value的存储形式,底层是用C语言编写的
基于key-value形式的数据字典,结构非常简单,没有数据表的概念,直接用键值对的形式完成数据的管理,Redis支持5种数据类型:
- 字符串
- 列表
- 集合
- 有序集合
- 哈希
安装 Redis
下载
解压,并在本地硬盘任意位置创建文件夹,在其中创建3个子文件夹
- bin:放置启动 redis 的可执行文件
- db:放置数据文件
- etc:放置配置文件,设置redis服务的端口、日志文件位置、数据文件位置等
同时将解压后(或者安装后的所有文件)都拷贝到创建的这个文件夹下面
启动redis服务
打开终端,进入到上一步新建的目录下面
先启动server:
./redis-server.exe ./redis.windows.conf
当然你也可以将server 注册为一个服务,但是我不建议这样做
再启动 client:
./redis-cli.exe
对数据进行操作:
set key value
get key
退出client:shutdown
Spring Boot整合Redis
spring data Redis 操作 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>springbootredis</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 切记先引入springboot工程的 parent-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
</parent>
<dependencies>
<!-- web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springboot 整合redis,使用的是spring data 来操作redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 连接池是 apache 提供的 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- lombok 简化代码,主要是简化entity 与 数据库的映射代码-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
- 2、创建实体类,必须实现序列化接口,否则无法存入redis缓存数据库
package com.example.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @author latin-xiao-mao
* @date 2020/7/17 19:26
* @description 因为要存入 redis 中,故必须需要实现 Serializable 接口
* 因为是给内存中存,所以必须完成序列化操作
* @className Student
*/
@Data // 使用lombok 简化代码(比如getter/setter)
public class Student implements Serializable {
private String name;
private Integer id;
private Double score;
private Date birthday;
}
- 3、创建控制器
package com.example.controller;
import com.example.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;
/**
* @author latin-xiao-mao
* @date 2020/7/17 19:43
* @description
* @className StudentHandler
*/
@RestController
public class StudentHandler {
//redis为我们提供了一个操作data的操作对象
@Autowired // 启动时会自动为我们创建一个实例对象,只需要注入即可
private RedisTemplate redisTemplate;
/**
* 往redis中存入数据对象
* @param student
* 这里为什么要写 @RequestBody呢,因为我们要将客户端传过来的 JSON对象 转换为Java实体类对象
*/
@PostMapping("/set")
public void set(@RequestBody Student student){
// 然后我们直接通过 redisTemplate 来操作数据,但是必须先调用 opsForValue()方法(此方法将key,value直接封装成一个对象来操作)
redisTemplate.opsForValue().set("student", student);
}
@GetMapping("/get/{key}") // 表明 /get/ 后面的是一个 变量
public Student get(@PathVariable("key") String key){ // pathvariable 通过变量名称key来获取实际的值
return (Student) redisTemplate.opsForValue().get(key);
}
}
- 4、创建配置文件application.yml
spring:
redis:
database: 0 # 0表示统一的数据库,一般不用修改
host: 127.0.0.1
port: 6379
- 5、创建启动类
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author latin-xiao-mao
* @date 2020/7/17 19:57
* @description
* @className Application
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// 启动
SpringApplication.run(Application.class, args);
}
}
Redis 如何存储5种数据类型
- 字符串
@GetMapping("/{key}")
public String stringTest(@PathVariable("key") String key){
redisTemplate.opsForValue().set(key, "hello world!!!");
String result = (String) redisTemplate.opsForValue().get(key);
return result;
}
- 列表
/**
* 列表的存取,redis列表实际相当于java 中的list
*/
@GetMapping("/list")
public List<Object> listTest(){
// 存
ListOperations<String, Object> listOperations = redisTemplate.opsForList(); // List 数据类型就用 opsForList
listOperations.leftPush("list", "hello");
listOperations.leftPush("list", "world");
listOperations.leftPush("list", 123);
// 取
List<Object> list = listOperations.range("list", 0, 2);
return list;
}
- 集合
/**
* redis中的集合 实际相当于Java中的 set,无序不重复
* @return
*/
@GetMapping("/set")
public Set<Object> setTest(){
// setOperations key一般是 string类型,value取决于你实际的需求
SetOperations<String, Object> setOperations = redisTemplate.opsForSet();
setOperations.add("set", "hello"); // 测试是否不可重复
setOperations.add("set", "hello");
setOperations.add("set", "world");
setOperations.add("set", "world");
setOperations.add("set", 0);
setOperations.add("set", 0);
// 取
Set<Object> set = setOperations.members("set");
return set;
}
- 有序集合
/**
* 有序集合 zset
* @return
*/
@GetMapping("/zset")
public Set<String> zsetTest(){
ZSetOperations<String, String> zSet = redisTemplate.opsForZSet();
zSet.add("zset", "hello", 1); // 第三个参数是,存储的位置,可以通过这个控制它的顺序
zSet.add("zset", "world", 2);
zSet.add("zset", "java", 3);
Set<String> set = zSet.range("zset", 0, 2);
return set;
}
- 哈希
传统的HashMap是由key,value组成的,格式为:
HashMap<key, value>
而redis中的 哈希是下面格式的,它多了一个参数key:
HashOperations<key, hashkey, value>
key:每一组数据的id
hashkey和value是一组完整的 HashMap数据,通过key来区分不同的HashMap
/**
* 哈希,需要三个参数:key,hashKey,value
* @return
*/
@GetMapping("/hash")
public String hashTest(){
HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
// 第一个key,取出一组 hashMap,第二个key,取出value
hashOperations.put("key", "hashKey", "hello");
String str = hashOperations.get("key", "hashKey");
return str;
}
本文来自博客园,作者:LoremMoon,转载请注明原文链接:https://www.cnblogs.com/hello-cnblogs/p/16398921.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南