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

集成缓存框架入门

作者: 寂静的春天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