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

有电脑网站怎样建手机互联网营销是什么意思

有电脑网站怎样建手机,互联网营销是什么意思,深圳网站建设sz886,郴州网站建设公司一、为何需要两级缓存架构? 在分布式系统中,Redis作为分布式缓存已广泛应用。但当系统面临超高并发读取(如热点商品详情页访问)或超低延迟要求(如金融行情数据推送)时,纯远程缓存面临两大瓶颈&…

一、为何需要两级缓存架构?

在分布式系统中,Redis作为分布式缓存已广泛应用。但当系统面临超高并发读取(如热点商品详情页访问)或超低延迟要求(如金融行情数据推送)时,纯远程缓存面临两大瓶颈:

  1. 网络IO开销:每次Redis访问需10-50ms的网络延迟
  2. 带宽瓶颈:单节点Redis吞吐量上限约10万QPS

通过引入Caffeine本地缓存作为一级缓存,Redis作为二级缓存,可实现:

命中
未命中
命中
未命中
客户端请求
Caffeine本地缓存
Redis集群
数据库

二、核心架构设计与挑战

1. 数据访问流程
public User getUserById(Long userId) {String key = "user:" + userId;// 1. 先查CaffeineUser user = caffeineCache.get(key, k -> {// 2. 未命中则查RedisObject obj = redisTemplate.opsForValue().get(k);if (obj != null) return obj;// 3. Redis未命中查DBUser dbUser = userMapper.selectById(userId);redisTemplate.opsForValue().set(k, dbUser, 30, TimeUnit.SECONDS);return dbUser;});return user;
}

命中率提升效果:本地缓存可达95%+,整体命中率99%+

2. 关键优势对比
指标纯Redis缓存两级缓存架构提升幅度
平均响应时间1-10ms100ns-1ms10-100倍
数据库请求量100%<1%99%+
Redis带宽占用100%10%-30%70%-90%
3. 核心挑战与解决方案

挑战一:缓存一致性

  • 问题场景:集群中节点A更新数据,节点B仍读旧缓存
  • 解决方案:Redis Pub/Sub + 本地缓存失效
// 配置Redis消息监听
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory factory) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(factory);container.addMessageListener((message, pattern) -> {String key = new String(message.getBody());caffeineCache.invalidate(key); // 失效本地缓存}, new ChannelTopic("cacheEvict"));return container;
}// 数据更新时发布消息
public void updateUser(User user) {userMapper.updateById(user);redisTemplate.delete(key);redisTemplate.convertAndSend("cacheEvict", key); // 发布失效通知
}

实测效果:万级QPS下,缓存同步延迟<5ms

挑战二:缓存穿透/雪崩

  • 解决方案组合
    Caffeine.newBuilder().maximumSize(10_000) // 限制本地缓存数量.expireAfterWrite(10, TimeUnit.SECONDS) // 短TTL.refreshAfterWrite(1, TimeUnit.SECONDS) // 异步刷新.recordStats() // 开启监控
    
    配合Redis:
    spring:redis:timeout: 100ms # 快速失败lettuce:pool:max-active: 200 # 连接池优化
    

三、三种实现方案深度对比

方案1:手动编码模式

适用场景:需要精细控制缓存逻辑

// 手动查询两级缓存
public User queryUser(long userId) {String key = "user-" + userId;return (User) caffeineCache.get(key, k -> {Object redisVal = redisTemplate.opsForValue().get(k);if (redisVal != null) return redisVal;return userMapper.selectById(userId);});
}

优点:完全掌控缓存逻辑
缺点:代码侵入性强

方案2:Spring Cache注解

配置示例

@Configuration
@EnableCaching
public class CacheConfig {@Beanpublic CacheManager cacheManager() {CaffeineCacheManager manager = new CaffeineCacheManager();manager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).maximumSize(1000));return manager;}
}// 业务层使用
@Service
public class UserService {@Cacheable(value="users", key="#userId", condition="#userId%2==0")public User getUser(Long userId) {return userMapper.selectById(userId);}
}

注解对比

注解作用关键参数
@Cacheable查询数据时缓存结果key, condition, unless
@CachePut强制更新缓存key
@CacheEvict删除缓存allEntries, beforeInvocation
方案3:自定义注解(推荐生产环境使用)

定义注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DoubleCache {String cacheName();String key(); // 支持SpEL表达式long l2TimeOut() default 120;CacheType type() default CacheType.FULL; // FULL/PUT/DELETE
}

切面核心逻辑

@Aspect
@Component
public class CacheAspect {@Around("@annotation(doubleCache)")public Object handleCache(ProceedingJoinPoint pjp, DoubleCache doubleCache) throws Throwable {String realKey = parseKey(doubleCache, pjp); // 解析SpELswitch (doubleCache.type()) {case PUT: Object result = pjp.proceed();updateCache(realKey, result); return result;case DELETE:deleteCache(realKey);return pjp.proceed();default: // FULLif (caffeineCache.getIfPresent(realKey) != null) return caffeineCache.getIfPresent(realKey);if (redisTemplate.hasKey(realKey)) {Object val = redisTemplate.opsForValue().get(realKey);caffeineCache.put(realKey, val);return val;}Object dbResult = pjp.proceed();updateCache(realKey, dbResult);return dbResult;}}
}

四、高可用设计最佳实践

  1. 本地缓存策略优化

    Caffeine.newBuilder().maximumSize(10_000) // 防OOM.expireAfterWrite(15, TimeUnit.SECONDS) // 短TTL保新鲜.refreshAfterWrite(1, TimeUnit.SECONDS) // 后台刷新.recordStats() // 监控命中率.writer(new CacheWriter() { // 淘汰监听public void delete(String key, Object value, RemovalCause cause) {log.info("Evicted key: {}, Cause: {}", key, cause);}});
    
  2. Redis层优化建议

    • 使用HashTag保证热点数据分片均衡:user:{12345}:profile
    • 设置差异化TTL防雪崩:baseTTL + random(0, 300)
    • 大Value压缩:redisTemplate.setValueSerializer(new SnappyRedisSerializer())
  3. 监控指标体系

    监控项健康阈值工具
    Caffeine命中率>85%cache.stats().hitRate()
    Redis延迟<50msRedis SLOWLOG
    本地缓存内存占用<JVM堆的30%JMX Metrics

五、性能压测对比

在4节点集群测试环境(16Core/32GB):

场景纯Redis QPS两级缓存 QPS平均延迟
商品详情读取12,00058,0008ms → 0.3ms
用户信息查询8,50045,00015ms → 0.5ms
库存扣减3,2003,50025ms → 22ms

结论:读密集型场景性能提升5X+,写操作提升有限


选型建议

  • 中小项目:Spring Cache注解(快速实现)
  • 高并发系统:自定义注解+Pub/Sub同步(精细控制)
  • 实时性要求极高:Caffeine W-TinyLFU算法(98%命中率)

通过两级缓存架构,某电商平台在2025年大促期间成功支撑1.2亿QPS,Redis成本降低60%。正确实施该架构可让您的系统在性能和成本间获得最佳平衡!

http://www.dtcms.com/wzjs/122906.html

相关文章:

  • 常州企业网站建站模板广州seo工程师
  • 网站上的截图怎么做太原seo
  • 坂田网站建设流程青岛seo推广
  • 网站如何做视频教程seo推广怎么收费
  • 网站怎么做英语和中文的泰州百度关键词优化
  • 网站设计师培训中心电商网站建设哪家好
  • 绵阳做网站优化seo教程下载
  • 网站内链少改怎么做seo标题关键词怎么写
  • 汉南做网站今日刚刚发生的新闻
  • 网站建设公司应该怎么转型软文代写公司
  • 最专业 汽车网站建设天津债务优化公司
  • wordpress 前台打不开债务优化是什么意思
  • 网站建设公司资讯推广计划怎么做推广是什么
  • 平凉市建设厅官方网站无锡哪里有做网站的
  • 优质网站建设公司哪家好百度首页优化
  • 太原市做网站好的科技公司bt蚂蚁磁力
  • b2b网站一个人可以做吗怎么制作链接网页
  • 如何建立一个免费的网站网站多少钱
  • 商标查询官方入口seo网络推广企业
  • 免费网站模板之家推广软文平台
  • 大型网站制作百度搜索结果优化
  • 网站空间租赁费用成都百度推广
  • 重庆市建设工程信息网官方网站关键字搜索引擎
  • 过期域名网站上海野猪seo
  • 机械产品做哪个网站seo是什么简称
  • 网站群建设目标青岛网站设计公司哪家好
  • 广州天河区做网站抚州seo排名
  • 专业网站设计服务商产品网络营销策划方案
  • 做网站一定要psd吗搜索引擎优化包括哪些
  • 付费 视频 网站 怎么做网站开发与设计