From 269fb0f83ae0011dc61a555bdebdf0373a3f1b61 Mon Sep 17 00:00:00 2001
From: sheng <2094038054@qq.com>
Date: Mon, 17 Apr 2023 14:53:17 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8redis=E7=BC=93=E5=AD=98?=
=?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81=E7=A0=81=E5=92=8C=E8=8F=9C?=
=?UTF-8?q?=E5=93=81=E6=95=B0=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/workspace.xml | 28 +++++++++++----
.../edu/hactcm/cotroller/DishController.java | 34 ++++++++++++++++--
.../edu/hactcm/cotroller/UserController.java | 9 +++--
target/classes/application.yml | 4 +++
.../edu/hactcm/cotroller/UserController.class | Bin 5066 -> 5505 bytes
5 files changed, 63 insertions(+), 12 deletions(-)
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 04f9be5..27fd2b3 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,10 +4,12 @@
-
+
-
-
+
+
+
+
@@ -61,7 +63,7 @@
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
- "last_opened_file_path": "D:/JavaWeb/project/take_out",
+ "last_opened_file_path": "D:/JavaWeb/project/take_out/src/main/java/cn/edu/hactcm/config",
"project.structure.last.edited": "Project",
"project.structure.proportion": "0.0",
"project.structure.side.proportion": "0.0",
@@ -69,16 +71,19 @@
"spring.configuration.checksum": "c52b1b9a69639134c64c20f35b444ef6"
}
}
+
+
+
+
-
@@ -161,6 +166,7 @@
+
1681702796320
@@ -169,7 +175,14 @@
1681702796320
-
+
+ 1681704109575
+
+
+
+ 1681704109575
+
+
@@ -188,6 +201,7 @@
-
+
+
\ No newline at end of file
diff --git a/src/main/java/cn/edu/hactcm/cotroller/DishController.java b/src/main/java/cn/edu/hactcm/cotroller/DishController.java
index bd7ad4a..68f2389 100644
--- a/src/main/java/cn/edu/hactcm/cotroller/DishController.java
+++ b/src/main/java/cn/edu/hactcm/cotroller/DishController.java
@@ -13,11 +13,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
@RestController
@Slf4j
@@ -32,6 +34,9 @@ public class DishController {
@Autowired
private DishFlavorService dishFlavorService;
+
+ @Autowired
+ private RedisTemplate redisTemplate;
/**
* 添加菜品,涉及对两张表进行操作,引入新的数据模型Dto同时包含两张表的属性值,可以完美接受浏览器端传输的数据。
* @param dishDto
@@ -39,6 +44,11 @@ public class DishController {
*/
@PostMapping
public R save(@RequestBody DishDto dishDto){
+ String key = "dish_"+dishDto.getCategoryId()+dishDto.getStatus();
+ redisTemplate.delete(key);
+ //全部删除
+ /*Set keys = redisTemplate.keys("dish_*");
+ redisTemplate.delete(keys);*/
dishService.saveWithFlavor(dishDto);
return R.success("添加菜品成功!");
}
@@ -112,6 +122,14 @@ public class DishController {
@Transactional
@PutMapping
public R update(@RequestBody DishDto dishDto){
+ //由于执行了更新操作,缓存中的数据与数据库中的数据已经不再一直,产生脏读数据。所以要对缓存进行删除
+ //按照分类删除
+ String key = "dish_"+dishDto.getCategoryId()+dishDto.getStatus();
+ redisTemplate.delete(key);
+ //全部删除
+ /*Set keys = redisTemplate.keys("dish_*");
+ redisTemplate.delete(keys);*/
+
//对dish表进行更新
dishService.updateById(dishDto);
@@ -152,6 +170,14 @@ public class DishController {
*/
@GetMapping("/list")
public R> list(Dish dish){
+ //直接从缓存中取数据,能取到直接返回,取不到再查数据库
+ String key ="dish_"+dish.getCategoryId()+dish.getStatus();
+ List list = (List) redisTemplate.opsForValue().get(key);
+ if (list != null) {
+ return R.success(list);
+ }
+
+ //需要查数据库:
//封装条件:
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId())
@@ -160,7 +186,7 @@ public class DishController {
//根据category_id查询该分类对应的所有菜品信息
List dishes = dishService.list(queryWrapper);
//由于还要向移动端展示菜品的备选口味,所以此处需要查询dish_flavor表,将flavor一并返回给前端,故此封装为DishDto对象。
- List dishDtos = new ArrayList();
+ list = new ArrayList();
for (Dish dishInfo : dishes) {
// 对象属性值拷贝
DishDto dishDto = new DishDto();
@@ -171,9 +197,11 @@ public class DishController {
List dishFlavors = dishFlavorService.list(dishFlavorLambdaQueryWrapper);
// 为DishDto对象的flavors属性赋值
dishDto.setFlavors(dishFlavors);
- dishDtos.add(dishDto);
+ list.add(dishDto);
}
- return R.success(dishDtos);
+ //将查询到的数据放入缓存
+ redisTemplate.opsForValue().set(key,list,60, TimeUnit.MINUTES);
+ return R.success(list);
}
}
diff --git a/src/main/java/cn/edu/hactcm/cotroller/UserController.java b/src/main/java/cn/edu/hactcm/cotroller/UserController.java
index 7f944d8..fdef736 100644
--- a/src/main/java/cn/edu/hactcm/cotroller/UserController.java
+++ b/src/main/java/cn/edu/hactcm/cotroller/UserController.java
@@ -7,6 +7,7 @@ import cn.edu.hactcm.utils.ValidateCodeUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
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.RequestMapping;
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/user")
@@ -22,6 +24,8 @@ public class UserController {
@Autowired
private UserService userService;
+ @Autowired
+ private RedisTemplate redisTemplate;
/**
* 发送手机短信验证码
@@ -36,7 +40,8 @@ public class UserController {
log.info(code);
//模拟发送短信
//SMSUtils.sendMessage("汉马外卖","","1111111111",code);
- session.setAttribute(user.getPhone(),code);
+// session.setAttribute(user.getPhone(),code);
+ redisTemplate.opsForValue().set(user.getPhone(),code,5, TimeUnit.MINUTES);
return R.success("发送成功");
}
return R.error("发送失败");
@@ -47,7 +52,7 @@ public class UserController {
public R login(@RequestBody Map map, HttpSession session){
String code = (String) map.get("code");
String phone = (String) map.get("phone");
- if (code != null && code.equals(session.getAttribute(phone))) {
+ if (code != null && code.equals(redisTemplate.opsForValue().get(phone))) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getPhone,phone);
User user = userService.getOne(queryWrapper);
diff --git a/target/classes/application.yml b/target/classes/application.yml
index 69ac670..0aa8245 100644
--- a/target/classes/application.yml
+++ b/target/classes/application.yml
@@ -10,6 +10,10 @@ spring:
url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: yjx062711.
+ redis:
+ host: localhost
+ port: 6379
+ database: 0
mybatis-plus:
configuration:
#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
diff --git a/target/classes/cn/edu/hactcm/cotroller/UserController.class b/target/classes/cn/edu/hactcm/cotroller/UserController.class
index 5177e0490b4d688f41dfff2f3f1f906f867f8eb8..d5b64d73edda7e7677f004dcd627b7e49b7dd740 100644
GIT binary patch
delta 2180
zcmai!d3;pW7017Kw)gVpl7yEK8A?D(g^&ua)mKiF{>a2y{xG_uyAk_#LzXLvPN3xu%64pVs3unA};3}
zQLf-ho2wkI=9@OxnEhKebE15kYc0NGbB-~&)}f3I78@OoV67|eKQvOeANTqwoB5H&
zk4<*JgrAt~HyCw`Is2*2Jfr+9%8lG)bF;%O{M>}R)#f&%{K71^+x*gWvB4<6vbn?T
zciQxreXDKa-@-PVoW*vVUpq`j=Pi02`slaVvFVjt2MMB;-?3ZsWxitZd(9s1wYX1nKYJ}6&^*XP3cY{BrUUENKX>)U
z{ny-Ju}||bj~sfv|E8@kY`yq$K9{hIN8U6eQNWs#HFtr+7yp~l!2Z)o1+E$@n=
z*VF{BBUpaSXA-4|ws&;SXiqOnv~>x$byedGyV=8?{Ns5Y$#f#q+MeocR8;yvc4b=I
zg#Xlvu5>z?%EX&mS0@*yS~Ci3&M9*jHcelk7&-ehO(oXE_H;|Uv%|2_oKCDxuJzUh
zLsg$sgCf|OlteSVN1ZZnw04g=^>Y%9TcoJ)rUfg!-OdG0Bzb;UqODUgL;{o-o#F6r
z{-cO{#ew0u-e`;RGERMN#GvC<>buO8)dWDk2eV|=1p`juRM8Zt
zF`F=1VXk;&CF{YGj5Lqa{W2T*D)R-4
z1%6mHi6#+>0&t*7LUd9EIAX^$x_ZJm@3W`!F2jH&XP{0QI(R6mb}|s
z;|}h}4X`Uq+1whpyr59l5USn7#kB|fjfMId5+F}SH_Zbav9y<=4dGaL2Qi3+@(f!n
zmS2d4`x!2=sBDPDBKJ}?K&6#yr&rv~Q
z5g*Di2cZo4P&QC3#ZD6HCQHUTj%A8qR4*_#utcP@WM-OWYF5k4tdXg?Or~XneC@s`
zlVPBqCCxSp9%r*m09YcH246$Z=8rMYinyGF5BlbVplb$NtPm$NL4|ND
zC7hvV6oC)L#Ii_QG+VS-tn&Y@7U#mdxE~X@T&zDK?z}_9&HseCw!@e!b)>PB(hV`m4Z$|zRdF8XkJROX#$`(z(nY_+|G>0(>sj?YuuO})rR
zyK!Hx75Nx?gL!7QyXcg
zL(UB%#f08xxRqs@ITQV(cj_!0&t8?qL+$(op9puT_OMb{NN+hNZm33
delta 1816
zcmZvcdwh;%7{|ZQdwQNdySKd_ti3EXXFD{$>mjbpNjFx|d`f>J&Zn=bpVl
zPky!OMTt!sr8ajn$7U{N3G`rIBJ;T?kp(QYxYy=B7Fpb{=>ryn6N$3eWQoNDt@5Bv
zGD}S!vT-PJ#Pj2tdqO*UGLdpBOjhb3UZhoaRHC?AUab!+Erw{}DT_5WYpK%Sp0-%0
zg=h5gti^LW(WP2gZ?Qqs=PfpBy2;YM*Rt87+T;a`7j3%olF1gEm)UCaih;klq{zU@
zFPT%6JGXe6+uB%DbIxe+hqsu#YVw*~MY5M9YZ`;=jc8x`Db{Is+Z5Z`VX{+EL$%^c
zt}@xBc%7J-DRxt9ppKWXJiU0yiRBf?SFAUwQ|zJs!uIjaJ5KEq(>Hiif+_a0(I7mt
zV17Yval!1O+|gxoX3Q>9>|?*;Ee;qM1KqP$8~037qH6}z-2PT-_S<1LrUdbYdB-pC
z2K9ns1MeytIH>4NACvbK?{mmqY_%Es0Wrm4b|^liQE`L=ijVkMvN~B+f4XW}JS&q=
z6rbvgea2A(tEjMSJB0CZjjUQ3S~5UZ6<1&&gG4g8mg~fc
zHeQXNfY98m7`_HNM9o_KF#;oY63nS1CH
z!Hx3y7~!FiEG9R}H*zAzTyADmT-9K-F#2|5xFvo&W4bsqWv?>JQFSEw*iZ6^EGOk3
zJ};2dz`UI7NT80ej~LCORZOeL8NZw6dBI3<4=o@Ph|zLv<}Okr!8$I{UefYHk4dS;3sYn!ili4x1%*XY|3{?*%Ef$um=2X|_F@9Jie^wO`gzdm
z!c<;>yOME?_u#Hm5M`nm>3)g3yG`5;mz@lJe~FH1a=XbSlgTDi
zynlhoR5&lMV^hh-iT1xGyW@XKcIQPU3)>VjO+rdTMro9q={~8*jFFM=>nH8kcB{zg
z@)>34j@1fnmgTgQVpYkz(Jx&e%5Rc