• 二级缓存j2cache和SpringBoot整合


    简介

    j2cache是开源的二级缓存库,支持实现:本地缓存Ehcache、Caffeine、远程缓存Redis、Memcached。常见解决方案 如一级缓存使用Ehcache、二级缓存使用Redis。

    上篇描述的阿里开源的jetcache,是支持二级缓存,只是相比j2cache不够灵活,还不够完善,前者是缓存统一操作规范,而j2cache是专注二级缓存库。

    与SpringBoot整合

    本文一级缓存:Caffeine、二级缓存:Redis。

    pom.xml 依赖

    <dependency>
        <groupId>net.oschina.j2cachegroupId>
        <artifactId>j2cache-coreartifactId>
        <version>2.8.4-releaseversion>
    dependency>
    <dependency>
        <groupId>net.oschina.j2cachegroupId>
        <artifactId>j2cache-spring-boot2-starterartifactId>
        <version>2.8.0-releaseversion>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    application.yml 配置

    # 设置j2cache配置文件
    j2cache:
      config-location: j2cache.properties
    
    • 1
    • 2
    • 3

    j2cache.properties

    # 一级缓存
    j2cache.L1.provider_class=caffeine
    # 二级缓存
    j2cache.l2-cache-open=true
    j2cache.L2.provider_class=net.oschina.j2cache.cache.support.redis.SpringRedisProvider
    j2cache.L2.config_section=redis
    redis.hosts=192.168.126.181:6379
    redis.timeout=2000
    redis.password=123456
    # 指定模式,可以消除一行警告信息
    redis.mode=single
    # 指定命名空间,可以作为key的公共前缀
    redis.namespace=j2cache
    # 一级缓存中的数据如何到达二级缓存
    j2cache.broadcast=net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    业务代码

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import net.oschina.j2cache.CacheChannel;
    import net.oschina.j2cache.CacheObject;
    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<>();
    
        private CacheChannel cacheChannel;
    
        public void add (User user) {
            // 插入数据库
            userList.add(user);
            // 设置缓存
            cacheChannel.set("user", user.getName(), user);
        }
    
        public void query(String name){
            CacheObject user = cacheChannel.get("user", 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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    利用百度API进行视频翻译制作
    Docker容器的应用部署
    MediaCodec 异步方式完成AAC硬解成PCM
    基于Python的二次元头像生成器 课程报告+源码
    老司机带带你,教你学会Java中又骚又暴力的“反射”技术
    从 C 到 C++ 编程 — 基础新增特性
    golang中channel使用
    OpenAI开发系列(二):大语言模型发展史及Transformer架构详解
    基于Java的校园跑腿接单管理系统设计与实现(源码+lw+部署文档+讲解等)
    in(...) 可能会让你排查Bug到崩溃,哈哈哈
  • 原文地址:https://blog.csdn.net/qq_37493888/article/details/126688783