缓存三兄弟缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,当请求大量不存在的数据时,就会导致数据库压力过大,甚至崩溃。
解决方案
布隆过滤器:布隆过滤器是一种数据结构,用于判断一个元素是否在一个集合中。它可以在O(1)的时间复杂度内完成判断,但是有一定的误判率。我们可以将所有可能存在的数据放入布隆过滤器中,当用户请求的数据不存在时,直接返回空,避免请求到达数据库。
缓存空值:当用户请求的数据不存在时,我们可以将空值存入缓存中,并设置一个较短的过期时间,比如5分钟。这样,当用户再次请求该数据时,可以直接从缓存中获取空值,而无需请求数据库。
参数校验:在用户请求之前,我们可以对请求参数进行校验,比如检查参数是否合法、参数是否在合理范围内等。如果参数不合法,可以直接返回错误信息,避免请求到达数据库。
缓存雪崩缓存雪崩是指缓存中大量数据同时过期或Reids服务宕机,导致大量请求直接到达数据库,导致数据库压力过大,甚至崩溃。
解决方案
设置不同的过期时间:为了避免缓存雪崩,我们可以为每个缓存的过期时间设置一个随机值,这样就可以避免大量数据同时过期。
使用Redis集群: ...
缓存更新策略1. Cache Aside1.1 Cache Aside 更新策略Cache Aside 是一种常见的缓存更新策略,其核心思想是先更新数据库,然后再删除缓存。具体步骤如下:
读请求:当客户端发起读请求时,首先查询缓存,如果缓存中存在数据,则直接返回缓存中的数据;如果缓存中不存在数据,则查询数据库,并将查询结果返回给客户端,同时将查询结果写入缓存。
写请求:当客户端发起写请求时,首先更新数据库,然后将缓存中的数据删除。这样可以确保缓存中的数据与数据库中的数据保持一致。
1.2 Cache Aside 的优点
一致性:Cache Aside 策略可以确保缓存中的数据与数据库中的数据保持一致,从而避免数据不一致的问题。
简单:Cache Aside 策略的实现相对简单,只需要在写请求时删除缓存即可。
1.3 Cache Aside 的缺点
缓存穿透:当数据库中不存在数据时,缓存中也不存在数据,此时每次读请求都会查询数据库,导致数据库压力过大。
缓存雪崩:当缓存中的数据大量失效时,大量的读请求会直接查询数据库,导致数据库压力过大。
2. Write Through ...
Java编程基础全面解析
一、Java语言概述1. Java的特点
☕ 跨平台性:Write Once, Run Anywhere
🧩 面向对象:封装、继承、多态
🔒 安全性:自动内存管理(GC)
⚡ 高性能:JIT即时编译技术
2. JDK/JRE/JVM关系123graph LR A[JDK] --> B[JRE] B --> C[JVM]
二、基础语法速成
第一个Java程序
12345public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, Java!"); }}
数据类型类型 关键字 示例整型 int int age = 25;浮点 double double price = 19.99;字符 char char grade = ‘A’;布尔 boolean ...

