首页
登录 | 注册

Spring cache 使用说明

 

package org.cheng.user.client.service;

import java.util.HashMap;
import java.util.Map;

import org.cheng.user.client.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * 统一命名缓存 名称
 * @author Cheng
 */
@CacheConfig(cacheNames = { "user" })
@Service
public class UserService {
    
    @Autowired
    private CacheManager cacheManager;
    
    /**
     * 单个命名缓存名称
     * sync 默认为false 为true 需要同步等待
     * @param id
     * @return
     */
    @Cacheable(cacheNames = "user", key = "#id",sync = false)
    public User get(Integer id) {
        System.out.println("--get---");
        User user = new User();
        user.setId(id);
        return user;
    }

    /**
     * 按key存储
     * 前置存储条件 condition 为true 存储
     * 后置执行条件 unless  为false 存储
     * 
     * @param user
     * @return
     */
    @CachePut(key = "#user.id", condition = "#user.id<10000", unless = "#result.name.length() < 3")
    public User save(User user) {
        user.setName("name - " + user.getId());
        return user;
    }

    /**
     * 按key删除
     * 
     * @param id
     * @return
     */
    @CacheEvict(key = "#id")
    public String del(Integer id) {
        System.out.println("--del---");
        return String.valueOf(id);
    }

    /**
     * 清除全部
     */
    @CacheEvict(allEntries = true)
    public void removeAll() {
    }
    
    /**
     * 返回所有的缓存信息
     * @return
     */
    public Map<String,Cache> cache() {
        Map<String,Cache> map = new HashMap<>();
        for(String name:cacheManager.getCacheNames()) {
            map.put(name, cacheManager.getCache(name));
        }
        return map;
    }

}

 

 

 

参考文献:

https://docs.spring.io/spring/docs/5.1.6.RELEASE/spring-framework-reference/integration.html#cache

https://www.cnblogs.com/OnlyCT/p/7845660.html#t4

 


相关文章

  • 目录 引入 简单工厂 抽象工厂 Spring的bean工厂 模拟Spring工厂实现 模拟IOC 引入 假设有一个司机, 需要到某个城市, 于是我们给他一辆汽车 public class Demo { public static void ...
  • 为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 Spring Boot 之时,我自己也在 ...
  • Spring的历史及哲学
    Spring的历史和哲学 1.Spring 历史 时间回到2002年,当时正是 Java EE 和 EJB 大行其道的时候,很多知名公司都是采用此技术方案进行项目开发.这时候有一个美国的小伙子认为 EJB 太过臃肿,并不是所有的项目都需要使 ...
  • Spring Boot入门(五):使用JDBC访问MySql数据库
    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序开发的过程中,操作数据库是必不可少的部分,前面几篇博客中,也一直未涉及到数据库的操作,本篇博客 就讲解下在Spring Boot中如何使用 ...
  • Spring入门(二):自动化装配bean
    Spring从两个角度来实现自动化装配: 组件扫描(component scanning):Spring会自动发现应用上下文中需要创建的bean. 自动装配(autowiring):Spring会自动满足bean之间的依赖. 为了更形象的解 ...
  • 补习系列(20)-大话 WebSocket 与 &quot;尬聊&quot;的实现
    目录 一.聊聊 WebSocket 二.Stomp 是个什么鬼 三.SpringBoot 整合 WebSocket A. 引入依赖 B. WebSocket 配置 C. 控制器 D. 前端实现 四.参考文档 一.聊聊 WebSocket 从 ...

2019 cecdns.com webmaster#cecdns.com
12 q. 0.076 s.
京ICP备10005923号