统一缓存库jetcache和SpringBoot整合

简介

jetcache是阿里开源缓存库的封装,它为不同的缓存解决方案提供统一的使用,它提供了比 Spring Cache 中更强大的注解。JetCache 中的注解支持原生 TTL,二级缓存,分布式环境下自动刷新,也可以Cache通过代码操作实例。目前支持本地缓存实现方式:Caffeine、LinkedHashMap。远程缓存实现:redis、tair。

各缓存库缺陷和特性

Spring Cache:远程缓存和本地缓存无法同时使用,不支持过期和缓存刷新。

Guava Cache/Caffeine:本地缓存,无法做分布式缓存。

Redis:分布式缓存,性能没本地缓存好

Ehcache:本地缓存,可通过RMI做分布式缓存,效果不好。

jetcache解决这些问题主要体现在:

  1. 在Spring Cache 基础上实现了 缓存过期设置、缓存刷新。
  2. 本地缓存和远程缓存共存方案。
  3. 注解无法实现的复杂的场景可通过api方式

与SpringBoot整合

pom.xml依赖

<dependency>
	<groupId>com.alicp.jetcachegroupId>
    <artifactId>jetcache-starter-redisartifactId>
    <version>2.6.2version>
dependency>

启用jetcache

@SpringBootApplication
@EnableCreateCacheAnnotation
// 开启方法注解
@EnableMethodCache(basePackages="com.terry")
public class App {

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

缓存注解的使用

import com.alicp.jetcache.anno.CacheInvalidate;
import com.alicp.jetcache.anno.CacheRefresh;
import com.alicp.jetcache.anno.CacheUpdate;
import com.alicp.jetcache.anno.Cached;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class UserService {

    @Data
    @AllArgsConstructor
    public static class User {
        private String name;
        private Integer age;
    }

    // 模拟数据库
    List<User> userList = new ArrayList<>();

    @CacheUpdate(name = "user", key = "#name", value = "#user")
    public void add (User user) {
        userList.add(user);
    }

    // 删除缓存
    @CacheInvalidate(name = "user", key = "#name")
    public void delete (String name) {
        // 删除逻辑
    }

    // 更新缓存
    @CacheUpdate(name = "user", key = "#name", value = "#user")
    public void update (User user) {
        // 修改逻辑
    }

    // 查询缓存,缓存过期时间 1小时
    @Cached(name="user", expire = 3600)
    // 定时5秒刷新缓存
    @CacheRefresh(refresh = 5)
    public List<User> query(){
        System.out.println("查询数据库");
        return userList;
    }
}

缓存Api的使用

import com.alicp.jetcache.Cache;
import com.alicp.jetcache.anno.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.stereotype.Service;

@Service
public class UserApiService {

    @Data
    @AllArgsConstructor
    public static class User {
        private String name;
        private Integer age;
    }

    // 创建缓存
    @CreateCache(name="user",expire = 1000)
    private Cache<String ,User> jetCache;

    public void add (User user) {
        jetCache.put(user.getName(), user);
    }

    public User get(String name){
        return jetCache.get(name);
    }
}

你可能感兴趣的:(SpringBoot,缓存,spring,boot,java)