• 统一缓存库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>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    启用jetcache

    @SpringBootApplication
    @EnableCreateCacheAnnotation
    // 开启方法注解
    @EnableMethodCache(basePackages="com.terry")
    public class App {
    
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    缓存注解的使用

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    缓存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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    git commit添加模板
    Linux入门教程:P10->用户权限类
    【详细】Java网络通信 TCP、UDP、InetAddress
    【apifox】如何写一份合格的 API 文档?
    pandas 学习的第一天
    【进程间通信:管道】
    B树、B+树、红黑树的定义、之间的区别、优缺点、数据结构、应用等
    ASP.NET Core 3.1系列(15)——Entity Framework Core之DB First
    【WSL】安装WSL和Docker-20220828
    MySQL数据库操作以及sql语句总结
  • 原文地址:https://blog.csdn.net/qq_37493888/article/details/126682313