Spring(12) -数据缓存Cache(1)

16 篇文章 0 订阅
13 篇文章 0 订阅
1.数据缓存Cache

常见CacheManager

SimpleCacheManager
使用简单的Collection来存储缓存,主要用来测试用途

ConcurrentMapCacheManager
使用 ConcurrentMap来存储缓存

EhCacheCacheManager
使用 EhCache作为缓存技术

RedisCacheManager
使用Redis作为缓存技术

2.常用的四个注解

@Cacheable、@CachePut、@CacheEvit @Caching

解释
@Cacheable
在方法执行前Spring 先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方祛并将方法返回值放进缓存
@CachePut
无论怎样,都会将方法的返回值放到缓存中。
@CachePut的属性@Cacheable保持一致

@CacheEvict
将一条或多条数据从缓存中删除
@Caching
可以通过@Caching 注解组合多个注解策略在一个方法上

本例将以 Spring Boot默认的 ConcurrentMapCacheManager作为缓存技术

3.编写测试实体类
package com.lglg.domain;

/**
 * Date:2020/8/30
 *
 * @author:lg
 */
public class Person {

    private  int id;

    private String age;

    private String name;



    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4.编写测试service
package com.lglg.service;

import com.lglg.domain.Person;

/**
 * Date:2020/8/30
 *
 * @author:lg
 */
public interface DemoService {
    Person save(Person person);

    void remove(int id);

    Person findOne(Person person);

}

package com.lglg.service.impl;

import com.lglg.domain.Person;
import com.lglg.service.DemoService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * Date:2020/8/30
 *
 * @author:lg
 */
@Service
public class DemoServiceImpl implements DemoService {

    /**
     * value  是指定缓存的名称  key是指定数据在缓存中存储的键
     * 通俗的介绍 value 就是一个map  key就是map中的key  通过value 找到对应的map  然后map
     * map.get(key) 得到缓存中的值
     *
     * 注意点 key = "#person.id"  这个key是取自入参中的值  而不是返回值中的值
     * @param person
     * @return
     */
    @Override
    @CachePut(value = "people",key = "#person.id")
    public Person save(Person person) {
        Person person1 = new Person();
        person1.setAge("12");
        person1.setId(1);
        person1.setName("保存");
        System.out.println("模拟保存成功了");
        return person1;
    }

    /**
     * 没有指定key  则方法参数作为key保存到缓存中去
     * @param id
     */
    @Override
    @CacheEvict(value = "people")
    public void remove(int id) {
        System.out.println("模拟删除");

    }


    @Override
    @Cacheable(value = "people",key = "#person.id")
    public Person findOne(Person person) {
        Person person1 = new Person();
        person1.setAge("12");
        person1.setId(1);
        person1.setName("查询");
        System.out.println("模拟查询");
        return person1;
//        return null;
    }
}

5.编写测试的controller
package com.lglg.controller;

import com.lglg.domain.Person;
import com.lglg.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Date:2020/8/30
 *
 * @author:lg
 */
@RestController
public class DemoController {

    @Autowired
    DemoService demoService;

    @RequestMapping("/put")
    public Person put(Person person){
        person.setId(1);
        return demoService.save(person);
    }


    @RequestMapping("/find")
    public Person findOne(Person person){
        person.setId(1);
        return demoService.findOne(person);
    }

    @RequestMapping("/remove" )
    public String remove(int id){
        demoService.remove(id);
        return "test";

    }
}

6.开启缓存注解支持
package com.lglg;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Date:2020/8/30
 *
 * @author:lg
 */

/**
 * SpringBootApplicaton 注解是SpringBoot项目的核心主角,煮需要目的是开启自动配置
 */
@SpringBootApplication
@RestController
@EnableCaching
public class LgApplication {

    public static void main(String[] args) {
        SpringApplication.run(LgApplication.class,args);
    }


    @RequestMapping("/")
    public String index(){
        return "helllo spring-boot demo01";
    }


}

6.测试

比较懒,自己测试看看多种情况

总结

注意点 key = “#person.id” 这个key是取自入参中的值 而不是返回值,不然不生效,一般实际操作,保存的id是自动生成的,没传入参,此时缓存通过id取不到,一般应用在查询修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值