From feb2494e588cbed65d8495058a1f2af05cdd0da9 Mon Sep 17 00:00:00 2001
From: HiYnga <3535736368@qq.com>
Date: Thu, 9 Jul 2026 16:48:15 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E4=BD=BF=E7=94=A8=20?=
=?UTF-8?q?Redis=20=E7=9A=84=E4=BD=BF=E7=94=A8=E6=96=B9=E6=B3=95=E5=92=8C?=
=?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../GradeSystem/src/com/yngang/demo/Main.java | 56 ++
2026-07-03/spring-demo/pom.xml | 8 +
.../yngang/springdemo/config/RedisConfig.java | 29 +
.../exception/BusinessException.java | 2 +-
.../springdemo/service/RedisDemoService.java | 6 +
.../service/impl/RedisDemoServiceImpl.java | 50 ++
.../service/impl/StudentServiceImpl.java | 44 +-
.../com/yngang/springdemo/util/RedisUtil.java | 616 ++++++++++++++++++
.../src/main/resources/application.yml | 13 +
.../service/impl/StudentServiceImplTest.java | 108 +++
2026-07-07/rag_agent_mvp.py | 282 ++++++++
11 files changed, 1210 insertions(+), 4 deletions(-)
create mode 100644 2026-07-01/backend/GradeSystem/src/com/yngang/demo/Main.java
create mode 100644 2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/config/RedisConfig.java
create mode 100644 2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/service/RedisDemoService.java
create mode 100644 2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/service/impl/RedisDemoServiceImpl.java
create mode 100644 2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/util/RedisUtil.java
create mode 100644 2026-07-03/spring-demo/src/test/java/com/yngang/springdemo/service/impl/StudentServiceImplTest.java
create mode 100644 2026-07-07/rag_agent_mvp.py
diff --git a/2026-07-01/backend/GradeSystem/src/com/yngang/demo/Main.java b/2026-07-01/backend/GradeSystem/src/com/yngang/demo/Main.java
new file mode 100644
index 0000000..8ea5d35
--- /dev/null
+++ b/2026-07-01/backend/GradeSystem/src/com/yngang/demo/Main.java
@@ -0,0 +1,56 @@
+package com.yngang.demo;
+
+// 需要对入库操作正确加锁,不加锁会导致库存不一致,
+// 要是两个线程同时执行到这行代码,都先加了5件,最后库存为10件会多出来5件库存导致库存不一致问题
+public class Main {
+
+ static class Warehouse {
+ private int stock;
+ public Warehouse(int stock) {
+ this.stock = stock;
+ }
+ public int getStock() {
+ return stock;
+ }
+ public void setStock(int stock) {
+ this.stock = stock;
+ }
+ }
+
+ static class MoveTask implements Runnable {
+ private Warehouse warehouse;
+ private String name;
+ private int moveCount;
+ public MoveTask(Warehouse warehouse, String name, int moveCount) {
+ this.warehouse = warehouse;
+ this.name = name;
+ this.moveCount = moveCount;
+ }
+ @Override
+ public void run() {
+ for (int i = 0; i < moveCount; i++) {
+ synchronized (warehouse) {
+ warehouse.setStock(warehouse.getStock() + 5);
+ }
+ System.out.println(name + " 入库 5 件,当前库存 " + warehouse.getStock());
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ Warehouse warehouse = new Warehouse(0);
+ MoveTask moveTaskA = new MoveTask(warehouse, "搬运工A", 10);
+ MoveTask moveTaskB = new MoveTask(warehouse, "搬运工B", 10);
+ Thread threadA = new Thread(moveTaskA);
+ Thread threadB = new Thread(moveTaskB);
+ threadA.start();
+ threadB.start();
+ try {
+ threadA.join();
+ threadB.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ System.out.printf("最终库存:%d 件,是否为100件:%b", warehouse.getStock(), (warehouse.getStock() == 100));
+ }
+}
diff --git a/2026-07-03/spring-demo/pom.xml b/2026-07-03/spring-demo/pom.xml
index 3149978..5036a53 100644
--- a/2026-07-03/spring-demo/pom.xml
+++ b/2026-07-03/spring-demo/pom.xml
@@ -42,6 +42,14 @@
org.springframework.boot
spring-boot-starter-validation
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ org.apache.commons
+ commons-pool2
+
org.projectlombok
lombok
diff --git a/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/config/RedisConfig.java b/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/config/RedisConfig.java
new file mode 100644
index 0000000..9fdf27a
--- /dev/null
+++ b/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/config/RedisConfig.java
@@ -0,0 +1,29 @@
+package com.yngang.springdemo.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+
+ @Bean
+ public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+ RedisTemplate redisTemplate = new RedisTemplate<>();
+ redisTemplate.setConnectionFactory(redisConnectionFactory);
+
+ // 设置序列化器
+ redisTemplate.setKeySerializer(new StringRedisSerializer());
+ redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
+ redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+ redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
+
+ redisTemplate.afterPropertiesSet();
+
+ return redisTemplate;
+ }
+
+}
diff --git a/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/exception/BusinessException.java b/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/exception/BusinessException.java
index 0c78ea0..ec71c0d 100644
--- a/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/exception/BusinessException.java
+++ b/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/exception/BusinessException.java
@@ -6,7 +6,7 @@ import lombok.Getter;
* 自定义业务异常:抛出此异常时,全局异常处理器会自动捕获并返回友好的错误信息
*/
@Getter
-public class BusinessException extends Exception {
+public class BusinessException extends RuntimeException {
private static final int DEFAULT_CODE = 500;
diff --git a/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/service/RedisDemoService.java b/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/service/RedisDemoService.java
new file mode 100644
index 0000000..620e051
--- /dev/null
+++ b/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/service/RedisDemoService.java
@@ -0,0 +1,6 @@
+package com.yngang.springdemo.service;
+
+public interface RedisDemoService {
+
+ void demo();
+}
diff --git a/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/service/impl/RedisDemoServiceImpl.java b/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/service/impl/RedisDemoServiceImpl.java
new file mode 100644
index 0000000..ecff477
--- /dev/null
+++ b/2026-07-03/spring-demo/src/main/java/com/yngang/springdemo/service/impl/RedisDemoServiceImpl.java
@@ -0,0 +1,50 @@
+package com.yngang.springdemo.service.impl;
+
+import com.yngang.springdemo.service.RedisDemoService;
+import com.yngang.springdemo.util.RedisUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Set;
+
+@Service
+@RequiredArgsConstructor
+public class RedisDemoServiceImpl implements RedisDemoService {
+
+ private final RedisUtil redisUtil;
+
+ @Override
+ public void demo() {
+ redisUtil.set("name", "zhangsan");
+ redisUtil.set("age", 18);
+ Object name = redisUtil.get("name");
+ Object age = redisUtil.get("age");
+ System.out.println(name);
+ System.out.println(age);
+
+ redisUtil.hSet("user:1", "name", "zhangsan");
+ redisUtil.hSet("user:1", "age", 18);
+ Object userName = redisUtil.hGet("user:1", "name");
+ System.out.println(userName);
+ Object userAge = redisUtil.hGet("user:1", "age");
+ System.out.println(userAge);
+
+ redisUtil.rPush("mylist", "zhangsan");
+ redisUtil.rPush("mylist", "lisi");
+ List