From 67f1bb10d0907cad0e4f99d13b73232c0476475c Mon Sep 17 00:00:00 2001 From: sheng <2094038054@qq.com> Date: Mon, 17 Apr 2023 16:44:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8Spring=20Cache=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E5=A5=97=E9=A4=90=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 14 +++++++++++--- pom.xml | 7 +++++++ .../cn/edu/hactcm/TakeOutApplication.java | 2 ++ src/main/java/cn/edu/hactcm/common/R.java | 4 +++- .../hactcm/cotroller/SetmealController.java | 5 +++++ src/main/resources/application.yml | 3 +++ target/classes/application.yml | 3 +++ .../cn/edu/hactcm/TakeOutApplication.class | Bin 1219 -> 1278 bytes target/classes/cn/edu/hactcm/common/R.class | Bin 4342 -> 4392 bytes .../edu/hactcm/cotroller/DishController.class | Bin 9896 -> 10897 bytes 10 files changed, 34 insertions(+), 4 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 27fd2b3..5447202 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,10 +6,16 @@ - - + + + + + - + + + + diff --git a/pom.xml b/pom.xml index 65d6531..f76777c 100644 --- a/pom.xml +++ b/pom.xml @@ -84,8 +84,15 @@ org.springframework.boot spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-cache + + + 8 8 diff --git a/src/main/java/cn/edu/hactcm/TakeOutApplication.java b/src/main/java/cn/edu/hactcm/TakeOutApplication.java index d4cfecf..d8fd211 100644 --- a/src/main/java/cn/edu/hactcm/TakeOutApplication.java +++ b/src/main/java/cn/edu/hactcm/TakeOutApplication.java @@ -5,11 +5,13 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; @Slf4j @SpringBootApplication @ServletComponentScan("cn.edu.hactcm.filter") @MapperScan("cn.edu.hactcm.mapper") +@EnableCaching//开启Spring Cache 注解方式的缓存功能 public class TakeOutApplication { public static void main(String[] args) { SpringApplication.run(TakeOutApplication.class, args); diff --git a/src/main/java/cn/edu/hactcm/common/R.java b/src/main/java/cn/edu/hactcm/common/R.java index 4bcaaa7..6d14877 100644 --- a/src/main/java/cn/edu/hactcm/common/R.java +++ b/src/main/java/cn/edu/hactcm/common/R.java @@ -1,6 +1,8 @@ package cn.edu.hactcm.common; import lombok.Data; + +import java.io.Serializable; import java.util.HashMap; import java.util.Map; @@ -9,7 +11,7 @@ import java.util.Map; * @param */ @Data -public class R { +public class R implements Serializable { private Integer code; //编码:1成功,0和其它数字为失败 diff --git a/src/main/java/cn/edu/hactcm/cotroller/SetmealController.java b/src/main/java/cn/edu/hactcm/cotroller/SetmealController.java index a41fd42..f9eb826 100644 --- a/src/main/java/cn/edu/hactcm/cotroller/SetmealController.java +++ b/src/main/java/cn/edu/hactcm/cotroller/SetmealController.java @@ -12,6 +12,8 @@ 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.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -38,6 +40,7 @@ public class SetmealController { */ @PostMapping @Transactional + @CacheEvict(value = "setmealCache",allEntries = true) public R saveMealDish(@RequestBody SetmealDto setmealDto){ setmealService.saveWithDish(setmealDto); return R.success("添加成功!"); @@ -78,6 +81,7 @@ public class SetmealController { * @return */ @DeleteMapping + @CacheEvict(value = "setmealCache",allEntries = true) public R deleteWithDish(@RequestParam List ids){ setmealService.removeWithDish(ids); return R.success("删除成功"); @@ -89,6 +93,7 @@ public class SetmealController { * @return */ @GetMapping("/list") + @Cacheable(value = "setmealCache",key = "#setmeal.categoryId+'_'+#setmeal.status") public R> get(Setmeal setmeal){ Long categoryId = setmeal.getCategoryId(); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0aa8245..6727c77 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -14,6 +14,9 @@ spring: host: localhost port: 6379 database: 0 + cache: + redis: + time-to-live: 1800000 #设置缓存数据的过期时间 mybatis-plus: configuration: #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射 diff --git a/target/classes/application.yml b/target/classes/application.yml index 0aa8245..6727c77 100644 --- a/target/classes/application.yml +++ b/target/classes/application.yml @@ -14,6 +14,9 @@ spring: host: localhost port: 6379 database: 0 + cache: + redis: + time-to-live: 1800000 #设置缓存数据的过期时间 mybatis-plus: configuration: #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射 diff --git a/target/classes/cn/edu/hactcm/TakeOutApplication.class b/target/classes/cn/edu/hactcm/TakeOutApplication.class index b462b700c941b8b2909efedcb77357cd8e3fe038..86bc30a575723d2cf18b015732be518817e45cbc 100644 GIT binary patch delta 200 zcmX|*y-vbV07lQfG?dl`1I9$;r-J+_R*STGEU~>;p??1hM`Q*Zw@2 zuNGmV)Ml6L(v1q=Rr0xBjLe*>Dxq}X}x`a$yA6-{g)X# m1#F5GxYA>561gUPV-875+!{8pC>vG~RHuk7HT<*RQHOt+EFtLt delta 132 zcmWm7OAf(60D$4YV`4gEJQ^EBhQi~pbrcOEB7c#`<{xYoBSD)^(HOYX-8hv!!;kQd{GZx$3w5-m}XqH-d7TXQ`#iTFq~Fnsl68 zURI9$hJiutsMD@giwk~(dZ*PXmxETzz|=%6O6X~FzFaE?tDWMyUv8H-iskyoM!i;C zlIwMu)I z&L<|XvX9n+w(f}GiOCqoZY$fgSdeZ$*kiEW&*I@Z)zZBN+f8jvOsZB^j-;E1B1b*_ z9N`#=ry0QzsCFv^G90&vh>=`qppo=gMCBG2s)-_Bf+ZXJ+J>Sc1)CkeN&@=&d5P0d zCoT2%dca;w30LEK8Kjjid~nr)S_CPr*RoRUB@o){htOV7MfM^e*=>UIGCu=LZNGez zJ3$RB_afJm0k`be&Pxsy*ZtPIW|)l65%-nFxrOu0fwJ8UTAgZ}$`G?Tt}t5T8WJA` zg4?d^GPAY&k4mg_!g6a(rCwYLxKXN=S7fUYaC)iUX_kWv71=rV;#0Cc4UF{PR~}~Z z2@l6G?%)j%Z{jB&p1`PwF+Azv1STB()WchNn@y$Gu%huIGiF6RtYFE*S$xvNqDar; zoQLOd-ox{_=%Eab>Y?uT)+s*QsZ>{mS7&iTNIm1>XZX2XenGrbqpZ&v9!`x)g(!*2 zZ%{BMJydayE3NBN*Mg&?R6B|hVUB+~=vhtsD$TV>PDZKBCErz0p%5lG$V5Cql11Su^;ZHShtLNC=VqnkR%ybtlU_ z`=FAKQ%`y+XOO}q@<^hhhIt=W;SW4YVv5%+LjXCr zcnkwLf?*uRG&Ljobv(sj;OQWW_z=T>xaaKn_Ss3EeS}Yz!B-HXdzzR&if2Mh*ZN_y z3&|L!L=4j?qmB{Nlf-na2a_&D7gHE_Y&-792<8+%9>!haJ;}5E`9HxaO#KCJ64&zG z5~NkCC*ZM;lKQB&Mu`c_zx_B(5QdUwSdN4$f){E^ILQ-%kV?=HnBjj-&Ka6;E_oG7 zuF$PG$>iTbD*pg!^0MzfoIg^hxzIoc$jFESqC;dtAX53RMuHkLv!Qpni+77jTHV}i zrOd?KSr54rjdsVu@8izi=`OoRcU&PXmgF8sm)z;@;GW#+l3pM_E~P#woth+ZtxXWc9%6IO&1c$@&jNjt`Hnvcs=UcqPjpGgNe3~0&HFxLx>v~m4wiYh@DCWjft9>l_&bb+sr(i^^+;jh(iATx zbNZjymowkR&>eWwIdcp9Ba6Y3MU%mjowLNoeizw07|2;UJ7$zAIW)?Y+?*puZfNA> z+?df&DMh29QaYCsqjYGL%B3SC^Da@FYQx0~($Lv#cho&Bs|7!d-{J+Xpah@ZB%|Zx zHjmeEjgrYBxQWkFvao;vFH*AkRlR_hC^=|yGklJc%WwV|K2IryUvayCfl@lQ!|#Q? zs$+eTvA#r%&tTAT|Bd|)UVaZF4t)N(#(Oxd#ndih)E&zt%#`00nlSdhL5ZtLn35Xk zZ5OYB?zd=4Y0AvyBPYG6rz%=fVF$jTnu5PfXvBtBP2teEkvTnMo>9~v&758*@ouJY z2hQ{svM-B%uw=?X&J0gnX$O6jDOu`>ouFQFb5?XTRI=5Py?w;~;9E!gQ+kmU5KBmD z5*wuGI+0o=ZH-cbBwWWjQ%rKO7EqyN@>6jVHz--8^AIhC(ry97n+&56^n1AP)5Ih} zhCxzb81K_n_ch)^YjdC`udbe_-k;)~) Lowb3QdaC~y{XH0X literal 4342 zcmbtX`*Ryt75-M*m*llAE3p$bk2+~mY{{EpKckvZU$} z2o%bzr9fL~VFrd7ekC(Zet-;dfy^-QOPS$sqLlC4yDP06Ie3Ola_`x5&z|$0^PPKE z`PYB``Zoa2;Fk_+X&9)dxV)N115J@yvb1HnIe@R@8)+Ou-NCIi(x{95H)Z*js9zK5 z+p>H|me)o1T?gMwV-M;szAyU^Wci_sH(b2w;zust62*@l{KSA+s;vbE_AFfYZ~8M8 zzq&p%Uu^~JLF1%>pU{o{FdK)c4_r`P-^ikwOn4W`mJ_@j*}}Z z%8_3;FsvQ5Tjk2kqF<-pX|_wHpxHDqH4%#vdYW7)RcC^=_RNM~YLzx;O0~_+T6Jbg z!k<;JhZoA#;9`4oHE68(s};t}F4RhX<%-`Z%X6r-YYLhHqhVnG&R)lQU%pk3930x= zompl#M>v_qptVt3yX-go&7c)Dn9zyYmEwab%}wx)o$`vjSwW*wBhsFlgq7dvU4l5j zL&O-0|KTJ8ko4Eq49vwT3EzzQ+676ijWR2dyb;_oVBPd9Z4z|$|MD6kv}eoJa%+yx zCnm43kJf{h?ugNe$r#3NE8DbKly2VJW60X0QQ(F_0s+E-^>E@BhQBOZd zIL6{>Mlb}b-3)<@#w{XZBo`WJBs~^Uxy6NQqR5wE$%eiP2vS_tAX(+$eY{TWu#lR}v5JUot1IC$5?&+v1$j~cj&unWwMxqI-j&|JN%$at%vL*~VOA|uhDG%@AeOZ1%yi?<>#3>$5jY};kiOR22FeW|Rz!?s&u1lSD z1TOwHpbK?@FI{8u6Z8Eq*?xi-%_obga?|KONlee+Qz53S{V>^uWDHXxhUqY)K1xjE#B`(wlP*LT zQy6!=6Zcty`7}<1aaXw~c{Y^)6P&`-U*INjHQy~kTBUj%avvo1aczy~n6UgALQ(M{ z(n*#hp^D%!hG?F{Q``kYDnUcgBuamlCcJ)Jg_6s3E3ahoA0U;#k2HB1xCiHt)M+j> zkO4BXR{_x>G9eJDd{-ku4Y``3_vg8bcZ*3{-P~-Y9E!QK9&jfb?T+`mk2`z2yUZ@# zaZ<2Yl6xFoa=W|iuH5O4I!An*J$+C*+ug=%_^_leU_L~-z+EnloiFf`ba~N598fUz zy|BX~(pFtheJ?aSawg>ryYet^rh(7mbNzzYyA2{O|BxW#D#!vB*-29GEAdQ{yA7fT z%aeS+o26tTSsul40tjYipW&3K(nbhZj)h*F$o9T;;~^j}Bt|n)?7T z-7VyQ2g|%u_y>&Nz)IdJ{2j*PRDKJddZaLTaf(aPoc<>Ua^{B^xeaeRXKrCAvKTH} zG#M`1IZJHp50Sl%!JL(|V@8>xL!(U5%{gM^hDJ`#jTwy;Q#2YWrgJGVN{2?NTskr` z?+~@ACS1HAb)8M8qwZo^4fs*~7AqV<36}a@e1SUQ_APSz7`>e5r}8Q#i<}4eA|)FY zUX7P1Is9+iX}nCy<9SYIW^XEE%!|HhDmuYH6u z2e0t2YkY+LT1@RAM%}SY!c6(;pb2B=8$lswwybghp(5)f5hm>zR|Y<|#$}!OY1G67OaTx8Y20A^VExhl{2hN#f5zl6H+!f+SqSI#W#Y z-y$}+n*2~ajWQ*RB<{m?N_MOO;!Q525cGSvAJfDnL54w6U>G0MRrfg|icwgRL1bh0 zszNh6X4bXbt__WyUgNHPp98+atofTxvxL`}xqPHf-^U(){q|-@w=gDTZDC(_zm|u& sWpi52i2e~RkBEGL@)izmAN6`P>qa>pR=wLgqLIqUMUu5bK4h={7c;~L4gdfE diff --git a/target/classes/cn/edu/hactcm/cotroller/DishController.class b/target/classes/cn/edu/hactcm/cotroller/DishController.class index aa12676654fc393d0119931d8e1c00ec77920338..1c7bd28845491b9c87c0acc439185bdeb1a63c2a 100644 GIT binary patch literal 10897 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 HIlVsvFoQQ# delta 4185 zcmb7H3wRXO75>lc&d%)aWRpx1$dEvcK#+t0N)!l?@P36vG?ExZ1x?T(0up?;ZdbRh}&thU3J9Eyx=bX9c zod5hY+_32G`sC9GdmaK%B^@!eU{4fH*c-<~c-X`vF+7UL3_Kn~1V1(KL<}bO*tFiK zq-Si1FFmImo;UC-6EDQ@BK8}2DFz#Rl;g{B{2H&s@f-YBU0yZNXW(}+IBNUFBz~_R z`G*(^@md^z#Ons$h@k{;DvP(2@7pTMpVT8>x1sq@{EKq>YaD;WyUOnGYWF=Qy|32( zp`;HCd>F%Me56+XY2sftLca6A)x$oq5yn0{3Ef{jph7TMA>NPSAo^p-7MLRHu9*@t zC2WdrO2ia{24bp9)RY*@CYn;>rdaBpWlBQbvrY7=dyXl&rr0JvG$qfJd_xLM84yFG z3^XKB7!yYZF&!x~q`2!987A(G&`Vua;XA}F2^Vy|q)*qJLKc^eU=Iu#Y{(G5h%8mt zvF7C=%WQ4$ICti{)g6LL_qk|!*URxv$!SHKg(W!MkP=Idl2Z4XtU-~ZEg34q+;_8T zL#;C09h+EOS(YP-Y+Xj=$T1-{S63HUV#!EL%B6x^qb#YEgoO)bw7V-&5*cI3SUJ{x zHBne}oQ&gz7h~ybE$&$%3MKG8K z1@3y?oM(wH`Igj3ttC@snkCa^1|K^!M`l?vTjp3e3uhZL*TOcT@qDSXWP!4)mpn@v zXfUK&$9RNP`{T z4SfgKG^jW+Z@--P3NO|G-#&;%Pn?fcjJcY&x=;a+40NrRb{St9HSt4j-=Qy)avLAzB@AB9%|V2yaC=)WZ{@GKKgfFnd&h z6tbFC7EUSNt6 zXZ6+ES1760_u;F!f{dMo=a9tLJV-u{uT#=_v>to|SF%H^*x+yCDj2w$KIOFX?Z1_= zzb0d!yf))-9UZ<+hj!@wsDxqQJ0b?YYhbSx2v&&8r01FdEj$O|1?Mken4p>ZVASrk9CO9 zeqJyR!&I9K>jV5XRQ6yvP?18JLfVMRZXBaQVb#ZpK1y}E$Vuu7TO%`V4|#1rns0LO z1PK!K0FHGjskV~MK7ms(nHDqHP&KSI{s}TYn}=I*8&8?QBy3_wHF}Tpx)P#)F>Ys9 z!ij1<`DUAG7EI}_nVS6Y3u2&c6Nlw?%tR-fqhPj$AitAfy$kDEu$!@syZ2x_?nN)|BfD)UyWLNA+u@DD z683IAhe5qv3|fw+-Ia{mOZHTdkMcJMKPCj!!0yjm&6R$O6E^RzsJ zTB5?9PR-p}HYPd4+>BX#&P;n&3bQw2BIP;uTu-i~JkOr*$)%L*>;;}&K)K#-@Z_lX zj^4o)M$+nd4uvu~Z+o+xKGZARNw;qw<#hWVrJRoRAmw!Xwo$IPPxjJFZt}jj(xI;B zRyx#`l+&RurkoCS9_4hXGbyJJ)z|})T{_a2#8guzln*Mee;}wxjyrnM*kYfu3yU5m z`2Cly`hr$(LG>o^zJ5bX@cQqK#B+D*IB+=Wwj za#6?{{wFywkn_KbnugupbgKU*cT?}7mH$1_E32r-AhJ@{$oc#rdy;w+N$O{0o1fz; gJdIzF=zQ&2YLgDB@8HjeZGL=&>3@#U{_AU>0$5>GWdHyG