• 12.19 redis缓存


    ---恢复内容开始---

    命中:应用程序从key中获取数据,取到后返回

    失效:到设置的失效时间后就失效

    更新:应用程序把数据存到数据库中后又放回去

    在项目中使用redis方法

    结合业务场景,避免滥用

    @Cacheable 第一次会访问方法内容,将第一次查询的数据存在redis中,与key对应key中,第二次就不用进入方法,直接用key取值

    @CachePut每次都会进入方法执行里面的内容,将每次返回的内容塞到redis中去,用于返回值与已缓存的数据类型一样时使用,也可用于数据变动,

    再次查询时也不会进入查询方法

    @CacheEvict在执行完毕时清除缓存的数据,其他方法需重新查询存值,一般在数据库数据更改时使用,用于返回值与已缓存的数据类型不一样时使用

    1.在项目启动类加上注解@EnableCaching

    @SpringBootApplication
    @EnableCaching
    public class SellApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SellApplication.class, args);
    	}
    }
    

      2.如果没有jar包,引入依赖

    <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-cache</artifactId>
    		</dependency>
    

      

    /开启redis缓存,返回对象也必须序列化
    //订单列表
        @GetMapping("/list")
        @Cacheable(cacheNames ="product",key = "123")//开启redis缓存,返回对象也必须序列化,cacheNames类似于文件夹,在类名上面加入注解
    @CacheConfig(cacheNames="product")作用域 在方法开启缓存注解中就不用加cacheNames ="product"
    动态传key 
    @Cacheable(cacheNames ="product",key = "#openid",condition="#openid==1",unless="#ResultVO<List<OrderDTO>>.getsize()<=0")
    condition="#openid==1"根据传入条件判断,当openid==1时才会返回值存到redis中,条件不成立时不会缓存
    unless="#ResultVO<List<OrderDTO>>.getsize()<=0" 根据返回值进行条件,可以根据返回值属性进行是否进行缓存,写的条件要与理想条件相反,例如想查询某
    属性>1的时候缓存,则unless里面条件要写成某属性<=1
    
        public ResultVO<List<OrderDTO>> list(@RequestParam("openid") String openid,
                                             @RequestParam(value = "page", defaultValue = "0") Integer page,
                                             @RequestParam(value = "size", defaultValue = "10") Integer size) {
            if (StringUtils.isEmpty(openid)) {
                log.error("【查询订单列表】openid为空");
                throw new SellException(ResultEnum.PARAM_ERROR);
            }
    
            PageRequest request = new PageRequest(page, size);
            Page<OrderDTO> orderDTOPage = orderService.findList(openid, request);
    
            return ResultVOUtil.success(orderDTOPage.getContent());
        }
    

      

      

      

    //返回类型实现Serializable序列化
    @Data
    public class ResultVO<T> implements Serializable{
    
    //生成Id可以使用插件SerialVersionUID生成,生成的码可以保证唯一,用快捷键直接生成,安装插件后,
    // 在keymap中找到SerialVersionUID插件,并设置快捷键,再使用快捷键生成,本机 ctrl+alt+反斜杠
    private static final long serialVersionUID = 3068837394742385883L;
    

      

     注意:数据库更新时理想状态是redis里面数据一起更新 

    ---恢复内容结束---

  • 相关阅读:
    2.5亿!华为成立新公司!
    两年半换第 4 份工作,做个总结
    不懂什么叫编程?
    Google 为什么把几十亿行代码放在一个库?
    IntelliJ 平台 2020 年路线图
    别找了,这是 Pandas 最详细教程了
    MongoDB是什么?看完你就知道了!
    有了这个神器,轻松用 Python 写 APP !
    整理出来几个比较实用的代码对比工具
    学习进度条 第六十一-七十五天 SpringMVC学习笔记
  • 原文地址:https://www.cnblogs.com/tanghao666/p/8066019.html
Copyright © 2020-2023  润新知