当前位置: 首页 > wzjs >正文

郑州东区做网站电话优化员工

郑州东区做网站电话,优化员工,做网站要几天,网站建设费用低设计好一、二级缓存(RedisCaffeine)架构设计 1. 设计目标 通过「本地缓存(Caffeine) 分布式缓存(Redis)」的分层结构,实现: 低延迟:热点数据本地缓存(内存级访问…

一、二级缓存(Redis+Caffeine)架构设计

1. 设计目标

通过「本地缓存(Caffeine)+ 分布式缓存(Redis)」的分层结构,实现:

  • 低延迟:热点数据本地缓存(内存级访问),减少网络IO;
  • 高可用:分布式缓存避免单点故障;
  • 成本优化:本地缓存存储高频小数据,Redis存储全量数据,降低内存成本。
2. 核心组件
组件作用关键配置示例
Caffeine本地缓存(JVM内存),存储高频热点数据maximumSize=10000, expireAfterWrite=5m(大小+过期策略)
Redis分布式缓存(远程内存),存储全量数据,提供持久化启用RDB/AOF,设置合理maxmemory-policy(如LRU)
缓存加载策略缓存未命中时的加载逻辑(如同步加载、异步加载)同步加载:直接查DB;异步加载:先返回旧值+后台更新
一致性机制解决双写/失效不一致问题发布订阅(更新时通知其他节点清理本地缓存)、TTL(兜底)
3. 核心流程(读请求)
命中
未命中
命中
未命中
客户端请求
查本地缓存Caffeine
返回数据
查Redis
返回数据并更新本地缓存
查数据库
返回数据并更新Redis和本地缓存
4. 注意事项
  • 缓存穿透:对空值(如DB不存在的key)也缓存(设置短TTL);
  • 缓存击穿:热点key过期时,使用互斥锁(如Redis的setnx)避免大量请求打穿DB;
  • 内存控制:Caffeine通过maximumSizemaximumWeight限制内存,避免OOM;
  • 一致性:写操作时先更新DB,再删除/更新缓存(推荐「先删缓存,再更新DB」+ 延迟双删)。
方案痛点
一、核心不一致场景分析

可能导致不一致的典型场景:

  1. 写操作顺序问题:更新数据库后未及时更新/删除缓存,导致后续读请求读取到旧缓存值;
  2. 并发写冲突:多个线程同时更新数据库和缓存,导致缓存与数据库最终状态不一致;
  3. 本地缓存隔离:分布式系统中,不同节点的本地缓存(Caffeine)可能因未同步而持有旧数据。

二、缓存失效策略设计
1. 主动失效(优先策略)

通过显式删除/更新缓存确保一致性,适用于对一致性要求高的场景(如订单状态变更)。

流程设计(写操作)

graph TDA[更新数据库] --> B{删除Redis缓存}B --> C[发布「缓存失效」事件(Redis Pub/Sub)]C --> D[各节点订阅事件后删除本地Caffeine缓存]

关键实现细节

  • 先更新数据库,再删除缓存(而非先删缓存):避免因数据库更新失败导致缓存被删后无数据可用;
  • Redis Pub/Sub通知:写操作完成后,通过Redis发布事件(如频道cache_invalidate),内容为失效的key列表;
  • 本地缓存监听:每个服务节点订阅该频道,收到事件后立即调用Caffeine.invalidate(key)删除本地缓存。
2. 被动过期(兜底策略)

通过设置**TTL(生存时间)**作为最终一致性的保障,适用于对一致性要求稍低但性能敏感的场景(如商品详情)。

配置示例

  • Caffeine:设置expireAfterWrite=5m(写入5分钟后过期),避免长期持有旧数据;
  • Redis:设置TTL=10m(比Caffeine长,确保Redis过期前本地缓存已先过期),防止本地缓存失效后Redis仍存旧值。
3. 防并发不一致:延迟双删

针对高并发场景下“删除缓存→更新数据库→新请求读缓存”的时间窗口问题,采用延迟双删策略:
作用:
前置删除:减少用户读到脏数据的时间窗,比如只有后置删除的情况下,数据更新了,缓存还没更新,先删一次减少脏数据时间窗。
后置删除:这个删除才是缓存-数据库最终一致的关键,这里是保证数据库完成操作后,发出补偿操作删除缓存来达成最终一致性。
其实如果只保证最终一致性的话,只需要后删,可以看业务体验是否能接受加入前置删除。

// 伪代码示例(Java)
public void updateData(String key, Object newData) {// 1. 先删除本地缓存和Redis缓存caffeineCache.invalidate(key);redisTemplate.delete(key);// 2. 更新数据库database.update(newData);// 3. 延迟(如1秒)后再次删除缓存(避免步骤2执行期间有新请求将旧数据加载到缓存)new Thread(() -> {try {Thread.sleep(1000);caffeineCache.invalidate(key);redisTemplate.delete(key);} catch (InterruptedException e) {Thread.currentThread().interrupt();}}).start();
}

三、一致性增强补充
  • 缓存加载互斥:读缓存未命中时,使用Redis分布式锁(如RedissonRLock)限制只有一个线程加载数据库数据,避免大量请求同时打穿数据库;
  • 空值缓存:对数据库不存在的key(缓存穿透场景),在Caffeine和Redis中缓存null(设置短TTL,如30秒),避免重复查询数据库;
  • 监控报警:通过Prometheus+Grafana监控缓存命中率、过期次数、Pub/Sub消息延迟,及时发现一致性异常。

四、代码示例(Spring Boot整合)
1. Caffeine配置(主动失效)
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.util.concurrent.TimeUnit;@Configuration
public class CaffeineConfig {@Beanpublic Cache<String, Object> caffeineCache() {return Caffeine.newBuilder().maximumSize(10000) // 最大容量.expireAfterWrite(5, TimeUnit.MINUTES) // 写后5分钟过期(被动兜底).build();}
}
2. Redis Pub/Sub监听(主动通知)
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;@Component
public class RedisCacheListener implements MessageListener {@Resourceprivate Cache<String, Object> caffeineCache;@Overridepublic void onMessage(Message message, byte[] pattern) {String invalidKey = new String(message.getBody());// 收到事件后删除本地缓存caffeineCache.invalidate(invalidKey); }
}
3. 写操作服务类(延迟双删)
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;@Service
public class DataService {@Resourceprivate RedisTemplate<String, Object> redisTemplate;@Resourceprivate Cache<String, Object> caffeineCache;public void updateData(String key, Object newData) {// 1. 首次删除缓存caffeineCache.invalidate(key);redisTemplate.delete(key);// 2. 更新数据库(伪代码)database.update(newData);// 3. 延迟1秒后二次删除new Thread(() -> {try {TimeUnit.SECONDS.sleep(1);caffeineCache.invalidate(key);redisTemplate.delete(key);} catch (InterruptedException e) {Thread.currentThread().interrupt();}}).start();}
}

二、Redis 6.0多线程模型解析

1. 背景:单线程的瓶颈

Redis 5.0及之前采用「单线程+IO多路复用」模型,优势是避免多线程竞争(如锁开销),但瓶颈在于:

  • 网络IO处理能力受限于单线程(尤其是高并发场景,如10万+ QPS);
  • 大键值对的序列化/反序列化可能阻塞主线程。
2. 多线程的核心设计

Redis 6.0引入多线程处理网络IO,但命令执行仍保持单线程(保证原子性)。具体流程:

graph TDA[主线程] --> B[监听端口,接收新连接]B --> C[将连接分配给IO线程池(默认4个线程)]C --> D[IO线程读取请求数据(read)并解析]D --> E[将解析后的命令放回主线程任务队列]E --> F[主线程单线程执行命令(核心逻辑)]F --> G[IO线程将响应写回客户端(write)]
3. 关键特性
  • IO线程仅处理网络IO:不参与命令执行,避免多线程竞争;
  • 可配置线程数:通过io-threads(默认4)和io-threads-do-reads(是否启用读IO多线程)控制;
  • 向后兼容:单线程模式仍可用(关闭io-threads-do-reads)。
4. 优势与限制
  • 优势:提升网络IO吞吐量(实测QPS可提升50%+);
  • 限制:命令执行仍是单线程,无法利用多核CPU处理计算密集型操作(如大量KEYS命令)。

文章转载自:

http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://00000000.nqmhf.cn
http://www.dtcms.com/wzjs/601581.html

相关文章:

  • 做市场调查的网站安徽省建设厅焊工证查询网站
  • 企业外贸网站汕尾做网站
  • 信息门户网站是什么wordpress 底部 wap
  • 做网站有必要吗win7图标不显示wordpress
  • 企业需求做网站在哪儿交易工程材料信息价查询网免费
  • 网站开发转码手机网站建设与管理期末总结
  • 山东自助seo建站wordpress 复杂开发
  • 网站广告接入263企业邮箱登陆入囗
  • 网站域名到期什么意思中国万网创始人
  • 家里电脑如何做网站学网站开发的能找什么工作
  • 网站仿做acca少女网课视频2023
  • 广告企业网站源码写作网站哪个名声好
  • 平台推广是什么南宁优化网站收费
  • 网站模板中文广东建设信息网手机版
  • 龙岗外贸网站建设什么网站可以免费做视频的软件
  • 1m带宽可以建设电商网站吗做网站怎么查看来访ip
  • 盐城网站建设哪家好爱网站最新发布址
  • 网站开发与app开发的区别设计网站推荐什么主题
  • 企业的网站建设制作平台营销网站建设专业公司
  • 荆州市城市建设投资开发有限公司网站网站专题欣赏
  • jsp做网站的优点专业做苗木的网站
  • 哈什么网一个网站做ppt手机网页wap
  • 龙口网站建设公司报价中铁三局招聘信息2022
  • 湖南网站设计微信是哪个公司开发的
  • 用dz程序做的电影网站运营主要做什么工作
  • 手机网站布局品牌推广活动策划案例
  • 网上商城平台运营方案湛江seo公司
  • 网站建设好学吗个人网站如何备案
  • 广东做网站公司网络设计报告总结
  • .网站建设的目标物流公司查询平台