• SpringBoot缓存


    (1)、使用@EnableCaching注解开启基于注解的缓存

     1 package cn.coreqi;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 import org.springframework.cache.annotation.EnableCaching;
     6 
     7 @SpringBootApplication
     8 @EnableCaching  //开启基于注解的缓存
     9 public class SpringbootjdbcApplication {
    10 
    11     public static void main(String[] args) {
    12         SpringApplication.run(SpringbootjdbcApplication.class, args);
    13     }
    14 
    15 }

    (2)、对使用缓存的方法添加缓存注解

     1 package cn.coreqi.service;
     2 
     3 import cn.coreqi.dao.UserRepository;
     4 import cn.coreqi.entities.User;
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.cache.annotation.*;
     7 import org.springframework.stereotype.Service;
     8 
     9 import java.util.List;
    10 import java.util.Optional;
    11 
    12 @Service
    13 //@CacheConfig(cacheNames = "user")   //抽取缓存的公共配置
    14 //可以使用@Caching注解在方法上运用多个缓存注解
    15 public class UserService {
    16     @Autowired
    17     private UserRepository userRepository;
    18 
    19     public User addUser(User user){
    20         return userRepository.save(user);
    21     }
    22 
    23     /**
    24      * @CachePut:调用方法并同步更新缓存,修改了数据库的某个数据同时更新缓存
    25      * 运行流程
    26      *  1.先调用目标方法
    27      *  2.将运行结果缓存起来并同步更新缓存
    28      * @CachePut的Key可以使用#result拿到运行结果
    29      * @param user
    30      * @return
    31      */
    32     @CachePut(cacheNames = "user",key = "#result.Id")
    33     public User modifyUser(User user){
    34         return userRepository.save(user);
    35     }
    36     public List<User> getList(){
    37         return userRepository.findAll();
    38     }
    39 
    40     /**
    41      * @Cacheable标注的方法在执行之前先来检查缓存中有没有这个数据,如果没有就运行方法并将结果放入缓存
    42      * 默认按照参数的值作为Key去查询缓存
    43      * 几个重要属性:
    44      *  cacheNames/value:指定当前缓存所在Cache组件的名称
    45      *  key:缓存数据使用的Key,默认是方法的入参和返回值组合,Key支持SpEL表达式
    46      *  keyGenerator:Key的生成器,可以自己指定Key的生成策略(key和keyGenerator二选一)
    47      *  cacheManager:指定缓存管理器,或者cacheResolver指定缓存解析器
    48      *  condition:指定符合条件的情况下才缓存数据
    49      *  unless:否定缓存,当unless指定的条件为True的情况下方法的返回值就不会被缓存,可以利用获取到的结果进行判断
    50      *  sync:是否使用异步模式
    51      * @param id
    52      * @return
    53      */
    54     @Cacheable(cacheNames = "user")
    55     public User getById(Integer id){
    56         System.out.println("查询数据Id:" + id);
    57         Optional<User> user =  userRepository.findById(id);
    58         return user.get();
    59     }
    60 
    61     /**
    62      * @CacheEvict:清除缓存
    63      * 几个重要属性:
    64      *  key:指定要清除数据的Key
    65      *  allEntries:是否清除这个缓存中所有缓存数据
    66      *  beforeInvocation:缓存的清除是否在方法运行之前执行,默认False
    67      * @param id
    68      */
    69     @CacheEvict(cacheNames = "user",key = "#id")
    70     public void delById(Integer id){
    71         userRepository.deleteById(id);
    72     }
    73 }

    *缓存支持的SpEL表达式

    描述 示例
    当前被调用的方法名
    #root.methodName
    当前被调用的方法
    #root.method.name
    当前被调用的目标对象
    #root.target
    当前被调用的目标对象类
    #root.targetClass
    当前被调用的方法的参数
    #root.args[0]

    当前方法调用使用的缓存列表

    (如@cacheable(value={"cache1","cache2"}),则有两个cache)

    #root.caches[0].name
    方法参数的名字,可以直接#参数名称,也可以使用#p0的形式,0代表参数索引
    #Id、#users0
    方法执行后的返回值(仅当方法执行之后的判断有效,如“unless”,“cachePut”的表达式,“cacheEvict的表达式”,beforeInvocation=false)  
    #result
  • 相关阅读:
    奔跑吧DKY——团队Scrum冲刺阶段-Day 3
    奔跑吧DKY——团队Scrum冲刺阶段-Day 2
    奔跑吧DKY——团队Scrum冲刺阶段博客汇总
    奔跑吧DKY——团队Scrum冲刺阶段-Day 1-领航
    哈夫曼编码的实现
    电子政务作业——我为政府网站纠错
    20172309 2018-2019《程序设计与数据结构》课程总结
    # Do—Now——团队冲刺博客_总结篇
    数据结构之哈夫曼树
    关于在ViewPager的子页面中不能跳转的问题
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10350798.html
Copyright © 2020-2023  润新知