diff --git a/demo-cache/demo-cache-caffeine/README.md b/demo-cache/demo-cache-caffeine/README.md new file mode 100644 index 0000000..144a73d --- /dev/null +++ b/demo-cache/demo-cache-caffeine/README.md @@ -0,0 +1,130 @@ +# spring-boot-demo-cache-caffeine + +> 此 demo 主要演示了 Spring Boot 如何集成 caffeine 使用缓存。 + +## 1.开发步骤 + +### 1.1.添加依赖 + +```xml + + + com.xkcoding + demo-cache-api + 1.0.0-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-cache + + + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + true + + +``` + +### 1.2.修改配置文件 + +```yaml +spring: + cache: + type: caffeine + caffeine: + spec: maximumSize=500,expireAfterAccess=600s + cache-names: + - user +logging: + level: + com.xkcoding: debug +``` + +### 1.3.开启缓存自动装配 + +```java +@EnableCaching +@Configuration(proxyBeanMethods = false) +public class CaffeineCacheAutoConfiguration { + +} +``` + +### 1.5.模拟数据服务 + +> 为了减少重复代码,该部分我将其抽取实现在 demo-cache-api 模块中 + +## 2.测试 + +```java +@Slf4j +@SpringBootTest +public class UserServiceTest { + + @Autowired + private UserService userService; + + /** + * 获取两次,查看日志验证缓存 + */ + @Test + public void getTwice() { + // 模拟查询id为1的用户 + User user1 = userService.get(1L); + log.debug("【user1】= {}", user1); + + // 再次查询 + User user2 = userService.get(1L); + log.debug("【user2】= {}", user2); + // 查看日志,只打印一次日志,证明缓存生效 + } + + /** + * 先存,再查询,查看日志验证缓存 + */ + @Test + public void getAfterSave() { + userService.saveOrUpdate(new User(4L, "user4")); + + User user = userService.get(4L); + log.debug("【user】= {}", user); + // 查看日志,只打印保存用户的日志,查询是未触发查询日志,因此缓存生效 + } + + /** + * 测试删除,查看caffeine是否存在缓存数据 + */ + @Test + public void deleteUser() { + // 查询一次,使caffeine中存在缓存数据 + userService.get(1L); + // 删除,查看caffeine是否存在缓存数据 + userService.delete(1L); + } +} +``` + +## 3.参考 + +- [Caffeine 官网](https://github.com/ben-manes/caffeine) +- [Spring Boot 官方文档之 Caffeine 集成](https://docs.spring.io/spring-boot/docs/3.0.0-M4/reference/htmlsingle/#io.caching.provider.caffeine) + diff --git a/demo-cache/demo-cache-caffeine/pom.xml b/demo-cache/demo-cache-caffeine/pom.xml new file mode 100644 index 0000000..b8601ab --- /dev/null +++ b/demo-cache/demo-cache-caffeine/pom.xml @@ -0,0 +1,71 @@ + + + + com.xkcoding + demo-cache + 1.0.0-SNAPSHOT + + + 4.0.0 + + demo-cache-caffeine + 1.0.0-SNAPSHOT + jar + + demo-cache-caffeine + Demo project for Spring Boot + + + 17 + + 3.1.1 + + + + + com.xkcoding + demo-cache-api + 1.0.0-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-cache + + + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + true + + + + + demo-cache-caffeine + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/demo-cache/demo-cache-caffeine/src/main/java/com/xkcoding/cache/caffeine/CaffeineCacheApplication.java b/demo-cache/demo-cache-caffeine/src/main/java/com/xkcoding/cache/caffeine/CaffeineCacheApplication.java new file mode 100644 index 0000000..83bfb01 --- /dev/null +++ b/demo-cache/demo-cache-caffeine/src/main/java/com/xkcoding/cache/caffeine/CaffeineCacheApplication.java @@ -0,0 +1,19 @@ +package com.xkcoding.cache.caffeine; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + *

+ * 启动器 + *

+ * + * @author yangkai.shen + * @date 2022-09-14 15:47 + */ +@SpringBootApplication +public class CaffeineCacheApplication { + public static void main(String[] args) { + SpringApplication.run(CaffeineCacheApplication.class, args); + } +} diff --git a/demo-cache/demo-cache-caffeine/src/main/java/com/xkcoding/cache/caffeine/configuration/CaffeineCacheAutoConfiguration.java b/demo-cache/demo-cache-caffeine/src/main/java/com/xkcoding/cache/caffeine/configuration/CaffeineCacheAutoConfiguration.java new file mode 100644 index 0000000..be584a9 --- /dev/null +++ b/demo-cache/demo-cache-caffeine/src/main/java/com/xkcoding/cache/caffeine/configuration/CaffeineCacheAutoConfiguration.java @@ -0,0 +1,18 @@ +package com.xkcoding.cache.caffeine.configuration; + +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Configuration; + +/** + *

+ * caffeine 缓存自动装配 + *

+ * + * @author yangkai.shen + * @date Created in 2022-09-14 15:48 + */ +@EnableCaching +@Configuration(proxyBeanMethods = false) +public class CaffeineCacheAutoConfiguration { + +} diff --git a/demo-cache/demo-cache-caffeine/src/main/resources/application.yml b/demo-cache/demo-cache-caffeine/src/main/resources/application.yml new file mode 100644 index 0000000..775d7d8 --- /dev/null +++ b/demo-cache/demo-cache-caffeine/src/main/resources/application.yml @@ -0,0 +1,10 @@ +spring: + cache: + type: caffeine + caffeine: + spec: maximumSize=500,expireAfterAccess=600s + cache-names: + - user +logging: + level: + com.xkcoding: debug diff --git a/demo-cache/demo-cache-caffeine/src/test/java/com/xkcoding/cache/caffeine/CaffeineCacheApplicationTests.java b/demo-cache/demo-cache-caffeine/src/test/java/com/xkcoding/cache/caffeine/CaffeineCacheApplicationTests.java new file mode 100644 index 0000000..0f0d5e0 --- /dev/null +++ b/demo-cache/demo-cache-caffeine/src/test/java/com/xkcoding/cache/caffeine/CaffeineCacheApplicationTests.java @@ -0,0 +1,13 @@ +package com.xkcoding.cache.caffeine; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class CaffeineCacheApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/demo-cache/demo-cache-caffeine/src/test/java/com/xkcoding/cache/caffeine/service/UserServiceTest.java b/demo-cache/demo-cache-caffeine/src/test/java/com/xkcoding/cache/caffeine/service/UserServiceTest.java new file mode 100644 index 0000000..494fce7 --- /dev/null +++ b/demo-cache/demo-cache-caffeine/src/test/java/com/xkcoding/cache/caffeine/service/UserServiceTest.java @@ -0,0 +1,62 @@ +package com.xkcoding.cache.caffeine.service; + +import com.xkcoding.cache.api.UserService; +import com.xkcoding.cache.entity.User; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +/** + *

+ * caffeine缓存测试 + *

+ * + * @author yangkai.shen + * @date Created in 2018-11-16 16:58 + */ +@Slf4j +@SpringBootTest +public class UserServiceTest { + + @Autowired + private UserService userService; + + /** + * 获取两次,查看日志验证缓存 + */ + @Test + public void getTwice() { + // 模拟查询id为1的用户 + User user1 = userService.get(1L); + log.debug("【user1】= {}", user1); + + // 再次查询 + User user2 = userService.get(1L); + log.debug("【user2】= {}", user2); + // 查看日志,只打印一次日志,证明缓存生效 + } + + /** + * 先存,再查询,查看日志验证缓存 + */ + @Test + public void getAfterSave() { + userService.saveOrUpdate(new User(4L, "user4")); + + User user = userService.get(4L); + log.debug("【user】= {}", user); + // 查看日志,只打印保存用户的日志,查询是未触发查询日志,因此缓存生效 + } + + /** + * 测试删除,查看caffeine是否存在缓存数据 + */ + @Test + public void deleteUser() { + // 查询一次,使caffeine中存在缓存数据 + userService.get(1L); + // 删除,查看caffeine是否存在缓存数据 + userService.delete(1L); + } +} diff --git a/demo-cache/demo-cache-ehcache/README.md b/demo-cache/demo-cache-ehcache/README.md index 91f261e..08d0c98 100644 --- a/demo-cache/demo-cache-ehcache/README.md +++ b/demo-cache/demo-cache-ehcache/README.md @@ -146,7 +146,7 @@ public class UserServiceTest { } /** - * 测试删除,查看redis是否存在缓存数据 + * 测试删除,查看ehcache是否存在缓存数据 */ @Test public void deleteUser() { diff --git a/demo-cache/demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/service/UserServiceTest.java b/demo-cache/demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/service/UserServiceTest.java index 088449b..d96c058 100644 --- a/demo-cache/demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/service/UserServiceTest.java +++ b/demo-cache/demo-cache-ehcache/src/test/java/com/xkcoding/cache/ehcache/service/UserServiceTest.java @@ -50,7 +50,7 @@ public class UserServiceTest { } /** - * 测试删除,查看redis是否存在缓存数据 + * 测试删除,查看ehcache是否存在缓存数据 */ @Test public void deleteUser() { diff --git a/demo-cache/pom.xml b/demo-cache/pom.xml index ffafc44..a76f7b9 100644 --- a/demo-cache/pom.xml +++ b/demo-cache/pom.xml @@ -20,6 +20,7 @@ demo-cache-api + demo-cache-caffeine demo-cache-ehcache demo-cache-redis