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

本文涉及的产品
云数据库 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);
}
目录
相关文章
|
5天前
|
Java 应用服务中间件 Maven
Spring Boot项目打war包(idea:多种方式)
Spring Boot项目打war包(idea:多种方式)
20 1
|
4天前
|
消息中间件 Java 数据安全/隐私保护
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
|
5天前
|
Java 应用服务中间件 Spring
【JavaEE】Spring Boot - 项目的创建和使用(下)
【JavaEE】Spring Boot - 项目的创建和使用
8 0
|
5天前
|
数据可视化 Java 应用服务中间件
【JavaEE】Spring Boot - 项目的创建和使用(上)
【JavaEE】Spring Boot - 项目的创建和使用
12 0
|
5天前
|
存储 Java 对象存储
【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取
【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取
9 0
|
5天前
|
Java 关系型数据库 MySQL
【Java Spring开源项目】新蜂(NeeBee)商城项目运行、分析、总结
【Java Spring开源项目】新蜂(NeeBee)商城项目运行、分析、总结
155 4
|
5天前
|
NoSQL Java MongoDB
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
【5月更文挑战第11天】本文介绍了如何将非关系型数据库MongoDB与Spring Boot框架集成,以实现高效灵活的数据管理。Spring Boot简化了Spring应用的构建和部署,MongoDB则以其对灵活数据结构的处理能力受到青睐。集成步骤包括:添加MongoDB依赖、配置连接信息、创建数据访问对象(DAO)以及进行数据操作。通过这种方式,开发者可以充分利用两者优势,应对各种数据需求。在实际应用中,结合微服务架构等技术,可以构建高性能、可扩展的系统。掌握MongoDB与Spring Boot集成对于提升开发效率和项目质量至关重要,未来有望在更多领域得到广泛应用。
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
|
Java 数据库连接 数据库
|
5天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
63 0
|
5天前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
142 0