本文实例为大家分享了Redis实现多级缓存的具体代码,供大家参考,具体内容如下 一、多级缓存 1. 传统缓存方案 请求到达Tomcat后,先去redis中获取缓存,不命中则去Mysql中获取 2. 多级缓存方案 tom
本文实例为大家分享了Redis实现多级缓存的具体代码,供大家参考,具体内容如下
请求到达Tomcat后,先去redis中获取缓存,不命中则去Mysql中获取
缓存是存储在内存中,数据读取速度较快,能大量减少对数据库的访问,减少数据库压力
分布式缓存,如redis
- 优点: 存储容量大,可靠性好,可以在集群中共享
- 缺点: 访问缓存有网络开销
- 场景: 缓存数据量大,可靠性高,需要在集群中共享的数据
进程本地缓存, 如HashMap, GuavaCache
- 优点:读取本地内存,没有网络开销,速度更快
- 缺点:存储容量有限,可靠性低(如重启后丢失),无法在集群中共享
- 场景:性能要求高,缓存数据量少
Caffeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库
目前spring内部的缓存用的就是这个
<dependency>
<groupId>com.GitHub.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.0.5</version>
</dependency>
package com.erick.cache;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import java.time.Duration;
public final class CacheUtil {
private static int expireSeconds = 2;
public static Cache<String, String> cacheWithExpireSeconds;
private static int maxPairs = 1;
public static Cache<String, String> cacheWithMaxPairs;
static {
cacheWithExpireSeconds = Caffeine.newBuilder()
.expireAfterWrite(Duration.ofSeconds(expireSeconds))
.build();
cacheWithMaxPairs = Caffeine.newBuilder()
.maximumSize(maxPairs)
.build();
}
public static String geTKEyWithExpire(String key) {
return cacheWithExpireSeconds.get(key, value -> {
return getResultFromDB();
});
}
public static String getKeyWithMaxPair(String key) {
return cacheWithMaxPairs.get(key, value -> {
return getResultFromDB();
});
}
private static String getResultFromDB() {
System.out.println("数据库查询");
return "db result";
}
}
package com.erick.cache;
import java.util.concurrent.TimeUnit;
public class Test {
@org.junit.Test
public void test01() throws InterruptedException {
CacheUtil.cacheWithExpireSeconds.put("name", "erick");
System.out.println(CacheUtil.getKeyWithExpire("name"));
TimeUnit.SECONDS.sleep(3);
System.out.println(CacheUtil.getKeyWithExpire("name"));
}
@org.junit.Test
public void test02() throws InterruptedException {
CacheUtil.cacheWithMaxPairs.put("name", "erick");
CacheUtil.cacheWithMaxPairs.put("age", "12");
System.out.println(CacheUtil.getKeyWithMaxPair("name"));
System.out.println(CacheUtil.getKeyWithMaxPair("age"));
TimeUnit.SECONDS.sleep(2);
System.out.println(CacheUtil.getKeyWithMaxPair("name")); // 查询不到了
System.out.println(CacheUtil.getKeyWithMaxPair("age"));
}
}
1.1 设置有效期
1.2 同步双写
1.3 异步通知
2.1 mysql主从复制
2.2 canal 工作原理
canal 模拟 Mysql slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
MySQL master 收到 dump 请求, 开始推送 binary log 给 slave (即 canal )
canal 解析 binary log 对象(原始为 byte 流)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
--结束END--
本文标题: Redis实现多级缓存
本文链接: https://www.lsjlt.com/news/33488.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0