美文网首页
集成缓存框架入门

集成缓存框架入门

作者: 寂静的春天1988 | 来源:发表于2020-08-25 14:29 被阅读0次

集成caffeineCache缓存功能

@Cacheable:缓存数据,一般用在查询方法上。将查询到的数据进行缓存
@CachePut:更新方法上,将数据从缓存中更新
@CacheEvict:删除缓存
2、pom文件引入相关jar包
3、CacheManager Bean
4、使用注解,标识我们的方法,哪些需要缓存

这里集成的是caffeineCache框架,也可以换成redis等等其他框架。

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
        </dependency>
@Configuration
@EnableCaching
@Slf4j
public class CaffeineCacheConfig {
    
    /**
     * CacheManager实现。
     * @return
     */
    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager=new SimpleCacheManager();
        
        ArrayList<CaffeineCache>  caches=new ArrayList<CaffeineCache>();
        caches.add(new CaffeineCache("users-cache", Caffeine.newBuilder()
                // 指定key下的最大缓存数据量
                .maximumSize(1000)
                // 最后一次访问后 120秒 过期
                .expireAfterAccess(120, TimeUnit.SECONDS)
                .build()));
        cacheManager.setCaches(caches);
        return cacheManager;
    }
}
    @Cacheable(cacheNames = "users-cache")
    @GetMapping
    public ResponseResult<PageResult> query(Integer pageNo,Integer pageSize,UserQueryDTO query) {
        
        log.info("未使用缓存");
        PageQuery pageQuery=new PageQuery<UserDTO>();
        pageQuery.setPageNo(pageNo);
        pageQuery.setPageSize(pageSize);
        pageQuery.setQuery(query);
        PageResult<List<UserDTO>> pageResult=userService.query(pageQuery);
        List<UserVO> userVOList=Optional.ofNullable(pageResult.getData())
                .map(List::stream)
                .orElseGet(Stream::empty)
                .map(userDTO-> {
                    UserVO userVO=new UserVO();
                    BeanUtils.copyProperties(userDTO, userVO);
                    userVO.setPassword("****");
                    return userVO;
                })
                .collect(Collectors.toList());
        PageResult<List<UserVO>> result=new PageResult<List<UserVO>>();
        BeanUtils.copyProperties(pageResult, result);
        result.setData(userVOList);
        return ResponseResult.success(result);
    }

使用@Cacheable就能缓存数据了。如果数据更新了需要使用@CachePut,@CacheEvict 来对缓存进行更新。

caffeineCache是本地缓存,不支持分布式。

相关文章

网友评论

      本文标题:集成缓存框架入门

      本文链接:https://www.haomeiwen.com/subject/ivfzjktx.html