传统缓存

用户请求 ——> tomcat ——> Redis <——> DB

tomcat的并发远远低于Redis,tomcat的并发就成为当前业务的瓶颈了

多级缓存

用户请求 ——> nginx ——> nginx本地缓存 ——> redis ——> JVM缓存 ——>DB

nginx本地缓存如果有结果直接返回给用户。

如果nignx本地缓存没有,就去找redis找缓存。

如果Redis没有缓存就去JVM找缓存。

实在没有数据,就去DB查询。如果查询不到,塞入可过期的Redis假数据,防止暴力攻击DB

了解分布式缓存与进程本地缓存

分布式缓存:Redis

优点

  • 可共享数据
  • 高可用(集群方案)

缺点

  • 维护性高

本地缓存:HashMap

优点

  • 内存读取,无网络开销

缺点

  • 多个服务之前无法共享数据
  • 宕机就意味数据丢失

认识Caffeine 本地缓存

官网:https://github.com/ben-manes/caffeine/wiki/Home-zh-CN

Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。可以理解成一个高性能的Map结构

Caffeine提供了三种缓存驱逐策略

  • 基于容量:创建Caffeine对象时设置缓存数量的上香
  • 基于时间:创建Caffeine对象时设置缓存的有效期
  • 基于引用:设置缓存为软引用或弱引用,利用GC来回收。性能较差

注意:Caffeine设置的元素过期时,不是立马删除,是等下一次读写操作时或系统空闲时完成对数据的清理!

For Java 11 or above, use 3.x otherwise use 2.x.

试验:Caffeine的API通过先查缓存,缓存没有才查询DB

配置类

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.Duration;

@Configuration
public class CaffeineConfig {

    @Bean
    public Cache<String, String> 交由Spring管理Caffeine对象() {
        return Caffeine.newBuilder()
                .initialCapacity(100) // 设置初始化大小是100
                .maximumSize(10) // 设置缓存最多存储10个
                .expireAfterWrite(Duration.ofSeconds(60)) // 60秒后标记为可清除
                .build();
    }

}

操作代码:Caffeine的API通过先查缓存,缓存没有才查询DB

    @Autowired
    private Cache<String, String> cacheA;

    @Test
    public void Caffeine() {
        String name = cacheA.getIfPresent("name"); // 如果没有name则返回null
        cacheA.put("name", "张三");
        String newName = cacheA.getIfPresent("name"); // 如果没有name则返回null

        // 新用法,如果缓存没有,就会执行Lambda表达式的内容。
        String age = cacheA.get("age", key -> {
            // 模拟DB查询,然后插入数据
            String db_Data = "10";
            return db_Data; // return的数据,就被缓存了,同时返回此数据
        });
        System.out.println("Debug在这里,看一下变量name、newName、age");
    }

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源