基于redisson+spring cache+caffeine实现的分布式异步通知高性能二级缓存开发

技术介绍

  • redisson
    Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。【Redis官方推荐】
    基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

  • spring cache
    Spring 3.1 引入了激动人心的基于凝视(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(比如EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代码中加入少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果。
    Spring 的缓存技术还具备相当的灵活性。不仅能够使用 SpEL(Spring Expression Language)来定义缓存的 key 和各种 condition,还提供开箱即用的缓存暂时存储方案,也支持和主流的专业缓存比如 EHCache 集成。

  • caffeine(目前性能最好的本地缓存)
    Caffeine是基于jdk 1.8 Version的高性能缓存库。Caffeine提供的内存缓存使用参考Google guava的API。Caffeine是基于Google Guava Cache设计经验上改进的成果。

实现功能

1.缓存对象到到应用本地缓存和redis中,读取的时候先通过应用本地缓存,若没有再去redis,同时再进行一次缓存到应用本地缓存
2.修改一个应用服务内的缓存,同时对其他机器(集群应用)内的本地缓存进行同步更新,采用redis消息通知实现
3.对应用本地缓存级别缓存设置超时机制,保证数据在网络波动的情况下实现对象缓存数据的最终一致性
4.基于反射实现注解形式的缓存读取,解决spring cache只能在注解上输入纯字符串,当修改一处缓存名称时候,其他的地方得不到同步修改

请求图解

未命名文件.jpg

项目依赖

      
       
            org.springframework.boot
            spring-boot-configuration-processor
        

        
            org.springframework.boot
            spring-boot-autoconfigure-processor
        
        
       
        
            com.github.ben-manes.caffeine
            caffeine
            2.7.0
        
      
     
        
            org.redisson
            redisson-spring-boot-starter
            3.11.0
            
                
                    io.lettuce
                    lettuce-core
                
            
        
     
        
            org.springframework.boot
            spring-boot-starter-cache
        

        
        
            org.springframework.session
            spring-session-core
        

        
        
            com.fasterxml.jackson.datatype
            jackson-datatype-jsr310
            2.9.7
        

        
            com.fasterxml.jackson.module
            jackson-module-parameter-names
            2.9.7
        
        
            com.fasterxml.jackson.datatype
            jackson-datatype-jdk8
            2.9.7
        
      
        
            org.springframework.boot
            spring-boot-starter-aop
        
        
       
        
            net.dreamlu
            mica-auto
            provided
        

      
      
            org.projectlombok
            lombok
            provided
        

你可能感兴趣的:(基于redisson+spring cache+caffeine实现的分布式异步通知高性能二级缓存开发)