From 681aff8bd56fbe2c384fc2dbd0f6471e222cccff Mon Sep 17 00:00:00 2001
From: Cxx0822 <1556464090@qq.com>
Date: Sun, 22 Mar 2026 16:25:37 +0800
Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0Redis=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/.vitepress/theme/router/index.ts | 3 +-
.../SpringBoot/SpringBoot-Redis.md | 142 ++++++++++++++++++
2 files changed, 144 insertions(+), 1 deletion(-)
create mode 100644 docs/Web-Backend/SpringBoot/SpringBoot-Redis.md
diff --git a/docs/.vitepress/theme/router/index.ts b/docs/.vitepress/theme/router/index.ts
index f6163d4..1a53b1e 100644
--- a/docs/.vitepress/theme/router/index.ts
+++ b/docs/.vitepress/theme/router/index.ts
@@ -37,7 +37,8 @@ export const routers = [
{ text: 'SpringBoot3原生镜像', link: '/Web-Backend/SpringBoot/SpringBoot3-GraalVM' },
{ text: 'SpringBoot技巧', link: '/Web-Backend/SpringBoot/SpringBoot-Skills' },
{ text: 'SpringBoot Common', link: '/Web-Backend/SpringBoot/SpringBoot-Common' },
- { text: 'SpringBoot RestClient简介', link: '/Web-Backend/SpringBoot/SpringBoot-RestClient' }
+ { text: 'SpringBoot RestClient简介', link: '/Web-Backend/SpringBoot/SpringBoot-RestClient' },
+ { text: 'SpringBoot Redis简介和使用', link: '/Web-Backend/SpringBoot/SpringBoot-Redis' }
]
},
{
diff --git a/docs/Web-Backend/SpringBoot/SpringBoot-Redis.md b/docs/Web-Backend/SpringBoot/SpringBoot-Redis.md
new file mode 100644
index 0000000..75a9992
--- /dev/null
+++ b/docs/Web-Backend/SpringBoot/SpringBoot-Redis.md
@@ -0,0 +1,142 @@
+---
+ title: SpringBoot Redis简介和使用
+ date: 2026-03-22
+---
+
+# 一、简介
+ Redis是一个高性能的开源内存数据库,用作缓存、数据库和消息中间件。它以极快的读写速度(基于内存存储)支持字符串、列表、哈希等多种数据结构。Redis提供数据持久化、主从复制、哨兵模式等高可用特性,广泛应用于缓存、会话存储、排行榜、消息队列等场景。
+
+# 二、安装
+1. 通过apt包管理器安装:
+```bash
+sudo apt update
+sudo apt install redis-server
+sudo systemctl enable redis-server
+```
+
+2. 配置远程和密码访问(可选)
+
+ 打开`/etc/redis/redis.conf`文件,更改配置:
+```conf
+bind 0.0.0.0 ::1
+protected-mode yes
+requirepass password
+```
+
+ `systemctl restart redis-server`重启服务。
+
+# 三、SpringBoot使用
+## 3.1 引入依赖
+```xml
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+```
+
+## 3.2 配置文件
+```yml
+spring:
+ data:
+ redis:
+ host: 127.0.0.1
+ port: 6379
+ password: 123456
+```
+
+::: tip
+SpringBoot2中没有data层级
+:::
+
+## 3.3 简单使用
+```java
+@Component
+public class RedisUtils {
+
+ @Resource
+ private StringRedisTemplate redis;
+
+ public void set(String key, String value, long seconds) {
+ redis.opsForValue().set(key, value, seconds, TimeUnit.SECONDS);
+ }
+
+ public String get(String key) {
+ return redis.opsForValue().get(key);
+ }
+
+ public void delete(String key) {
+ redis.delete(key);
+ }
+
+ public Boolean hasKey(String key) {
+ return redis.hasKey(key);
+ }
+
+ // 匹配查询
+ public Set scanKeys(String pattern) {
+ return redis.execute((RedisCallback>) connection -> {
+ Set keys = new HashSet<>();
+ ScanOptions options = ScanOptions.scanOptions().match(pattern).count(1000).build();
+
+ try (Cursor cursor = connection.keyCommands().scan(options)) {
+ while (cursor.hasNext()) {
+ keys.add(new String(cursor.next(), StandardCharsets.UTF_8));
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Redis SCAN 执行失败,pattern=" + pattern, e);
+ }
+
+ return keys;
+ });
+ }
+}
+```
+
+::: tip
+生产环境中使用`scan`命令批量查询`key`值,`keys`命令会阻塞`Redis`线程。
+:::
+
+# 四、实战
+## 4.1 设备在线功能
+ 实现一个统计设备是否实时在线的功能。
+```java
+@RestController
+@RequestMapping("/device")
+public class DeviceController {
+
+ @Resource
+ private RedisUtils redisUtils;
+
+ private static final String HEARTBEAT_KEY = "device:heartbeat:";
+ private static final long EXPIRE_SECONDS = 40;
+
+ /**
+ * 设备心跳接口
+ * 设备每20-30秒调用一次
+ * 心跳key 40秒后过期,过期即认为设备离线
+ */
+ @PostMapping("/heartbeat")
+ public Boolean heartbeat(@RequestParam String deviceId) {
+ redisUtils.set(HEARTBEAT_KEY + deviceId, String.valueOf(System.currentTimeMillis()), EXPIRE_SECONDS);
+ return Boolean.TRUE;
+ }
+
+ /**
+ * 获取当前在线设备列表
+ */
+ @GetMapping("/online")
+ public Set getOnlineDevices() {
+ Set keys = redisUtils.scanKeys(HEARTBEAT_KEY + "*");
+ Set deviceIds = new HashSet<>();
+
+ for (String key : keys) {
+ String deviceId = key.substring(HEARTBEAT_KEY.length());
+ deviceIds.add(deviceId);
+ }
+
+ return deviceIds;
+ }
+}
+```
+
+ 客户端每30秒调用一次`/device/heartbeat`接口。
\ No newline at end of file