单体项目中资源管理模块集成Spring Cache

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 该内容是关于将Spring Cache集成到资源管理模块以实现缓存同步的说明。主要策略包括:查询时添加到缓存,增删改时删除相关缓存。示例代码展示了@Service类中使用@Transactional和@Cacheable注解进行缓存操作,以及在RedisTemplate中处理缓存的示例。

资源管理模块集成Spring Cache

缓存同步的思路:

  • 查询的时候添加到缓存中
  • 增删改的时候,删除缓存
@Service
@Transactional
public class ResourceServiceImpl implements ResourceService {
    /**
     * 多条件列表查询
     * @param resourceDto
     * @return
     */
    @Cacheable(value = CacheConstant.RESOURCE_LIST ,key ="#resourceDto.hashCode()")
    @Override
    public List<ResourceVo> getList(ResourceDto resourceDto) {
    }
    /**
     * 封装资源的树形结构
     *
     * @param resourceDto
     * @return
     */
    @Cacheable(value = CacheConstant.RESOURCE_TREE )
    @Override
    public TreeVo resourceTreeVo(ResourceDto resourceDto) {
    }
    /**
     * 添加资源
     * @param resourceDto
     */
    @Caching(evict = {@CacheEvict(value = CacheConstant.RESOURCE_LIST ,allEntries = true),
            @CacheEvict(value = CacheConstant.RESOURCE_TREE ,allEntries = true)})
    @Override
    public void createResource(ResourceDto resourceDto) {
    }
    
    /**
     * 修改资源
     * @param resourceDto
     */
    @Caching(evict = {@CacheEvict(value = CacheConstant.RESOURCE_LIST ,allEntries = true),
            @CacheEvict(value = CacheConstant.RESOURCE_TREE ,allEntries = true)})
    @Override
    public void updateResource(ResourceDto resourceDto) {
        
    }
    /**
     * 启用禁用
     * @param resourceVo
     * @return
     */
    @Caching(evict = {@CacheEvict(value = CacheConstant.RESOURCE_LIST ,allEntries = true),
            @CacheEvict(value = CacheConstant.RESOURCE_TREE ,allEntries = true)})
    @Override
    public void isEnable(ResourceVo resourceVo) {
        
    }
    /**
     * 删除菜单
     * @param resourceNo
     */
    @Caching(evict = {@CacheEvict(value = CacheConstant.RESOURCE_LIST ,allEntries = true),
            @CacheEvict(value = CacheConstant.RESOURCE_TREE ,allEntries = true)})
    @Override
    public void deleteByResourceNo(String resourceNo) {
       
    }
   
}

上述代码中使用到的常量需要自己定义:

package com.zzyl.constant;
public class CacheConstant {
    /**
     * 缓存父包
     */
    public static final String RESOURCE_PREFIX= "resource:";
    public static final String RESOURCE_LIST = RESOURCE_PREFIX+"list";
    public static final String RESOURCE_TREE = RESOURCE_PREFIX+"tree";
}

其中ResourceDto 需要添加根据查询条件获取hashCode方法

@Override
public int hashCode() {
    int result = Objects.hash(super.hashCode(), getParentResourceNo(), getResourceType(),getDataState());
    return result;
}

利用RedisTemplate代码的方式来实现缓存效果

public ResponseResult list(ResourceDto dto) {
    //查询redis
    String listStr = redisTemplate.opsForValue().get(CacheConstant.RESOURCE_LIST);
    //如果redis中有数据,则直接返回
    if (StringUtils.isNotEmpty(listStr)) {
        //把字符串转成集合
        List<Resource> resourceList = JSONArray.parseArray(listStr, Resource.class);
        return ResponseResult.success(resourceList);
    }
    //表示redis中没有命中
    List<Resource> list = resourceMapper.list(dto);
    //同步数据到redis中一份
    redisTemplate.opsForValue().set(CacheConstant.RESOURCE_LIST, JSON.toJSONString(list));
    return ResponseResult.success(list);
}
目录
相关文章
|
9天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
30 0
|
6天前
|
Java Shell 开发工具
git集成IDEA,托管项目实现版本管理
git集成IDEA,托管项目实现版本管理
21 0
|
9天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
35 0
|
1月前
|
存储 NoSQL 数据处理
组合和继承怎么集成一个性能较好的项目
组合与继承是面向对象编程的核心概念,前者通过对象间关联实现高效解耦,后者则重用代码以节省空间和内存。组合常用于现代项目,利用代理与依赖注入简化代码管理;而继承简化了子模块对父模块资源的应用,但修改会影响整体。随着分层解耦及微服务架构如SpringCloud的出现,这些技术进一步优化了数据处理效率和服务响应性能,尤其在分布式存储与高并发场景下。同步异步调用、Redis分布式应用等也广泛运用组合与继承,实现代码和内存空间的有效复用。
|
2月前
|
Java Spring UED
Spring框架的异常处理秘籍:打造不败之身的应用!
【8月更文挑战第31天】在软件开发中,异常处理对应用的稳定性和健壮性至关重要。Spring框架提供了一套完善的异常处理机制,包括使用`@ExceptionHandler`注解和配置`@ControllerAdvice`。本文将详细介绍这两种方式,并通过示例代码展示其具体应用。`@ExceptionHandler`可用于控制器类中的方法,处理特定异常;而`@ControllerAdvice`则允许定义全局异常处理器,捕获多个控制器中的异常。
44 0
|
2月前
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
43 0
|
2月前
|
JavaScript 开发者
从零基础到实战应用:Angular入门指南带你一步步构建你的第一个Web应用——全面介绍环境搭建、项目创建、组件开发与应用集成
【8月更文挑战第31天】本文档是针对初学者的Angular入门指南。通过详细步骤与示例代码,教你如何使用Angular CLI搭建开发环境、创建新项目、添加及配置组件,并运行首个应用。Angular是由Google开发的强大Web框架,专为高效构建复杂单页应用设计。按照本指南操作,你将能够快速上手Angular,开启Web应用开发之旅。
54 0
|
3月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
Java 关系型数据库 MySQL
Spring Boot项目属性配置
Spring Boot项目属性配置
186 0
|
Java 数据库
【SpringBoot】项目属性配置
【SpringBoot】项目属性配置
127 0