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

菏泽网站建设效果营销软件网

菏泽网站建设效果,营销软件网,网站营销单页怎么做,大宗商品平台Redis Caffeine多级缓存 Redis Caffeine多级缓存电商场景深度解析一、实施目的二、具体实施2.1 架构设计2.2 组件配置2.3 核心代码实现 三、实施效果3.1 性能指标对比3.2 业务指标改善3.3 系统稳定性 四、关键策略4.1 缓存预热4.2 一致性保障4.3 监控配置Prometheus监控指标 …

Redis + Caffeine多级缓存

  • Redis + Caffeine多级缓存电商场景深度解析
    • 一、实施目的
    • 二、具体实施
      • 2.1 架构设计
      • 2.2 组件配置
      • 2.3 核心代码实现
    • 三、实施效果
      • 3.1 性能指标对比
      • 3.2 业务指标改善
      • 3.3 系统稳定性
    • 四、关键策略
      • 4.1 缓存预热
      • 4.2 一致性保障
      • 4.3 监控配置
        • Prometheus监控指标
    • 电商多级缓存完整实现方案
      • 1. 基础配置
        • 1.1 Maven依赖
        • 1.2 配置文件
      • 2. 核心实现类
        • 2.1 缓存配置类
        • 2.2 商品服务实现
        • 2.3 库存服务实现
      • 3. 辅助组件
        • 3.1 缓存预热
        • 3.2 监控端点
      • 关键点说明
        • 1. 多级缓存流程
        • 2. 缓存策略
        • 3. 一致性保障
        • 4. 监控能力
        • 5. 性能优化

Redis + Caffeine多级缓存电商场景深度解析

一、实施目的

  1. 性能优化

    • 降低商品详情页访问延迟
    • 提升系统整体吞吐量
  2. 成本控制

    • 减少Redis集群规模
    • 降低数据库查询压力
  3. 稳定性保障

    • 应对秒杀等高并发场景
    • 实现故障自动降级

二、具体实施

2.1 架构设计

用户请求 → Nginx → 应用服务器(Caffeine) → Redis集群 → MySQL/分库分表

2.2 组件配置

Caffeine配置

spring.cache.caffeine.spec=maximumSize=50000,expireAfterWrite=60s,refreshAfterWrite=30s,recordStats

Redis集群配置

spring.redis.cluster.nodes=192.168.1.101:6379,192.168.1.102:6379
spring.redis.lettuce.pool.max-active=500
spring.redis.lettuce.pool.max-wait=2000

2.3 核心代码实现

商品查询服务

public ProductDetail getProductDetail(Long productId) {// 本地缓存查询ProductDetail detail = caffeineCache.get(productId, k -> {// Redis查询String redisKey = "pd:" + productId;ProductDetail value = redisTemplate.opsForValue().get(redisKey);if (value == null) {// 数据库查询value = productDao.findById(productId);// 异步写入Redisexecutor.execute(() -> {redisTemplate.opsForValue().set(redisKey, value,60 + ThreadLocalRandom.current().nextInt(30),TimeUnit.MINUTES);});}return value;});return detail;
}

库存扣减服务

public boolean deductStock(Long productId, int num) {// 本地库存标记if (!localStockMark.tryLock(productId)) {return false;}try {// Redis原子扣减Long remain = redisTemplate.execute(new DefaultRedisScript<>("local stock = tonumber(redis.call('GET', KEYS[1]))\n" +"if stock >= tonumber(ARGV[1]) then\n" +"    return redis.call('DECRBY', KEYS[1], ARGV[1])\n" +"else\n" +"    return -1\n" +"end",Long.class),Collections.singletonList("stock:" + productId),String.valueOf(num));if (remain >= 0) {// 异步记录库存变更mq.sendStockMessage(productId, num);return true;}return false;} finally {localStockMark.unlock(productId);}
}

三、实施效果

3.1 性能指标对比

指标单Redis架构多级缓存架构提升幅度
平均响应时间68ms9ms655%
峰值QPS12万85万608%
数据库查询量100%8%减少92%

3.2 业务指标改善

  1. 秒杀场景

    • 下单成功率从35%提升至89%
    • 超卖问题完全杜绝
  2. 常规场景

    • 商品详情页加载时间从1.2s→180ms
    • 服务器成本降低40%

3.3 系统稳定性

  1. Redis故障时:

    • 核心商品仍可提供服务
    • 系统存活时间从<1分钟延长至30分钟
  2. 大促期间:

    • 流量波动减少70%
    • CPU负载降低55%

四、关键策略

4.1 缓存预热

@Scheduled(cron = "0 0 3 * * ?")
public void dailyPreheat() {List<Long> hotItems = hotProductService.predictHotItems();hotItems.parallelStream().forEach(id -> {ProductDetail detail = productDao.getDetail(id);caffeineCache.put(id, detail);redisTemplate.opsForValue().set("pd:" + id,detail,6, TimeUnit.HOURS);});
}

4.2 一致性保障

@Transactional
public void updateProduct(Product product) {// 1.删除缓存caffeineCache.invalidate(product.getId());redisTemplate.delete("pd:" + product.getId());// 2.更新数据库productDao.update(product);// 3.延迟双删executor.schedule(() -> {redisTemplate.delete("pd:" + product.getId());}, 1, TimeUnit.SECONDS);
}

4.3 监控配置

Prometheus监控指标
 name: cache_hit_rateexpr: rate(caffeine_cache_hits_total[5m]) / (rate(caffeine_cache_hits_total[5m]) +  rate(caffeine_cache_misses_total[5m]))name: redis_latencyexpr: histogram_quantile(0.99, rate(redis_command_duration_seconds_bucket[1m]))

电商多级缓存完整实现方案

1. 基础配置

1.1 Maven依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.8</version></dependency>
</dependencies>
1.2 配置文件
spring:redis:host: 127.0.0.1port: 6379password: yourpasswordlettuce:pool:max-active: 16max-wait: 1000msmax-idle: 8caffeine:specs:productCache: maximumSize=10000,expireAfterWrite=60s,recordStatsstockCache: maximumSize=5000,expireAfterWrite=10s

2. 核心实现类

2.1 缓存配置类
@Configuration
@EnableCaching
public class CacheConfig {@Beanpublic CacheManager cacheManager() {CaffeineCacheManager cacheManager = new CaffeineCacheManager();cacheManager.registerCustomCache("products", Caffeine.from(caffeineProperties().getSpec("productCache")).build());cacheManager.registerCustomCache("stocks",Caffeine.from(caffeineProperties().getSpec("stockCache")).build());return cacheManager;}@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}
}
2.2 商品服务实现
@Service
public class ProductServiceImpl implements ProductService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Cacheable(cacheNames = "products", key = "#productId")@Overridepublic ProductDetail getProductDetail(Long productId) {String redisKey = "product:" + productId;ProductDetail detail = (ProductDetail) redisTemplate.opsForValue().get(redisKey);if (detail == null) {detail = loadFromDB(productId);redisTemplate.opsForValue().set(redisKey, detail,60 + ThreadLocalRandom.current().nextInt(30),TimeUnit.MINUTES);}return detail;}private ProductDetail loadFromDB(Long productId) {// 数据库查询实现return productRepository.findById(productId);}
}
2.3 库存服务实现
@Service
public class StockServiceImpl implements StockService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Cacheable(cacheNames = "stocks", key = "#productId")@Overridepublic Integer getStock(Long productId) {String redisKey = "stock:" + productId;Integer stock = (Integer) redisTemplate.opsForValue().get(redisKey);if (stock == null) {stock = loadStockFromDB(productId);redisTemplate.opsForValue().set(redisKey,stock,10, TimeUnit.SECONDS);}return stock;}@CacheEvict(cacheNames = "stocks", key = "#productId")@Overridepublic boolean deductStock(Long productId, int quantity) {// 库存扣减逻辑return stockRepository.deductStock(productId, quantity);}
}

3. 辅助组件

3.1 缓存预热
@Component
public class CacheWarmUp implements CommandLineRunner {@Autowiredprivate ProductService productService;@Overridepublic void run(String... args) {List<Long> hotProducts = Arrays.asList(1001L, 1002L, 1003L);hotProducts.parallelStream().forEach(productService::getProductDetail);}
}
3.2 监控端点
@RestController
@RequestMapping("/cache")
public class CacheMonitorController {@Autowiredprivate CacheManager cacheManager;@GetMapping("/stats")public Map<String, Object> getCacheStats() {Map<String, Object> stats = new HashMap<>();CaffeineCache productsCache = (CaffeineCache) cacheManager.getCache("products");if (productsCache != null) {stats.put("products", productsCache.getNativeCache().stats());}return stats;}
}

关键点说明

1. 多级缓存流程
  1. 先查Caffeine本地缓存
  2. 未命中则查Redis
  3. 仍未命中则查数据库
  4. 回填各级缓存
2. 缓存策略
数据类型本地缓存TTLRedis TTL
商品数据60秒30-90分钟(随机)
库存数据10秒10秒
3. 一致性保障
  1. 使用@CacheEvict保证更新时缓存失效
  2. 库存采用短过期时间自动刷新
4. 监控能力
  1. 通过/cache/stats端点暴露缓存命中率
  2. 集成Spring Boot Actuator
5. 性能优化
  1. 并行预热热点数据
  2. Redis连接池配置
  3. 本地缓存大小控制
http://www.dtcms.com/wzjs/16262.html

相关文章:

  • 济南专业网站建设哪家便宜专业竞价托管哪家好
  • 江苏高校品牌专业建设工程网站怎么制作一个网站首页
  • seo顾问服务 品达优化hyein seo是什么牌子
  • 有哪些外国网站做精油的太原网站制作推广
  • 网站域名做哪个会计科目网上有卖网站链接的吗
  • 装修网站怎么做的好酒店推广渠道有哪些
  • 古典网站建设公司站长工具ping
  • 企业网站建设报价单深圳网络优化推广公司
  • 做网站美工的理由app下载注册量推广平台
  • 南昌做网站公司有哪些网络推广代理平台
  • 团队合作网站卖友情链接赚钱
  • 明光网站建设职业培训机构排名前十
  • 深圳市龙岗区做网站的公司青岛网站制作设计
  • 素材库视频免费下载无水印天津百度seo排名优化软件
  • wordpress自定义文章参数北京seo优化外包
  • 做网页的软件做网站蜘蛛搜索
  • 做外贸网站义乌网络上市场推广
  • 怎样在国外网站上做外贸广告排名点击工具
  • 在国外怎么做网站网络营销有哪些形式
  • 网站建设 网站开发网络推广工作是做什么的
  • 做网站的步骤流程网络事件营销
  • 网站建设行业怎么样桔子seo网
  • 如何防止网站挂黑链推广网站多少钱
  • 山西网站建设推荐余姚网站制作公司
  • 西安建设网站的公司手机百度下载安装
  • 太原市今日新闻网站的seo
  • 津做网站百度关键词规划师
  • 长沙网站建设联系电话网站seo基本流程
  • 做网站企业的发展前景2023年第三波疫情9月
  • wordpress 4.9江苏搜索引擎优化