spring一级缓存二级缓存和三级缓存的区别?spring二级缓存有什么用( 四 )
3、启动类上增加@EnableCaching
/** * 启动类 */@EnableCaching@SpringBootApplicationpublic class CacheApplication {public static void main(String[] args) {SpringApplication.run(CacheApplication.class, args);}}
4、在需要缓存的方法上增加@Cacheable注解
/** * 测试 */@Servicepublic class CaffeineCacheService { private final Logger logger = LoggerFactory.getLogger(CaffeineCacheService.class); /** * 用于模拟db */ private static Map<String, UserDTO> userMap = new HashMap<>(); { userMap.put("user01", new UserDTO("1", "张三")); userMap.put("user02", new UserDTO("2", "李四")); userMap.put("user03", new UserDTO("3", "王五")); userMap.put("user04", new UserDTO("4", "赵六")); } /** * 获取或加载缓存项 */ @Cacheable(key = "'cache_user_id_' + #userId", value = "https://www.08ts.cn/userCache") public UserDTO queryUser(String userId) { UserDTO userDTO = userMap.get(userId); try { Thread.sleep(1000);// 模拟加载数据的耗时 } catch (InterruptedException e) { e.printStackTrace(); } logger.info("加载数据:{}", userDTO); return userDTO; } /** * 获取或加载缓存项 * <p> * 注:因底层是基于caffeine来实现一级缓存,所以利用的caffeine本身的同步机制来实现 * sync=true 则表示并发场景下同步加载缓存项, * sync=true,是通过get(Object key, Callable<T> valueLoader)来获取或加载缓存项,此时valueLoader(加载缓存项的具体逻辑)会被缓存起来,所以CaffeineCache在定时刷新过期缓存时,缓存项过期则会重新加载 。* sync=false,是通过get(Object key)来获取缓存项,由于没有valueLoader(加载缓存项的具体逻辑),所以CaffeineCache在定时刷新过期缓存时,缓存项过期则会被淘汰 。* <p> */ @Cacheable(value = "https://www.08ts.cn/userCache", key = "#userId", sync = true) public List<UserDTO> queryUserSyncList(String userId) { UserDTO userDTO = userMap.get(userId); List<UserDTO> list = new ArrayList(); list.add(userDTO); logger.info("加载数据:{}", list); return list; } /** * 更新缓存 */ @CachePut(value = "https://www.08ts.cn/userCache", key = "#userId") public UserDTO putUser(String userId, UserDTO userDTO) { return userDTO; } /** * 淘汰缓存 */ @CacheEvict(value = "https://www.08ts.cn/userCache", key = "#userId") public String evictUserSync(String userId) { return userId; }}
项目源码: https://github.com/yudiandemingzi/springboot-redis-caffeine-cache
推荐相关二级缓存相关项目
1.阿里巴巴jetcache: https://github.com/alibaba/jetcache
2.J2Cache: https://gitee.com/ld/J2Cache
3.l2cache: https://github.com/ck-jesse/l2cache(感谢)
这几个现在业界比较常用的二级缓存项目,功能更加强大,而且性能更高效,使用也非常方便只要引入jar包,添加配置注解就可以 。
来源:https://www.cnblogs.com/qdhxhz/p/16029596.html
推荐阅读
- Spring容器这些扩展点你都清楚了吗?
- Springboot默认的错误页是如何工作及工作原理你肯定不知道?
- springboot 结合 logback 设置
- Spring中的SmartLifecycle作用
- Springboot配置文件加载路径及使用方式你真的都了解了吗?
- 手撸了一个 Spring MVC 框架
- 一个基于spring boot的Java开源商城系统
- excel下拉菜单如何设置一级二级-excel 下拉一二三级菜单-
- 教大家简单搭建一个SpringBoot项目
- 手把手带你编译Spring框架源码,让你的学习事半功倍