高并发下后端的两级缓存

本文探讨了在高并发环境下,如何通过引入Redis作为二级缓存,结合分布式锁和本地缓存来优化数据库访问,以解决缓存击穿问题。从直接访问数据库开始,逐步引入Redis缓存、分布式锁、本地缓存,最后讨论了使用布隆过滤器防止缓存穿透。
摘要由CSDN通过智能技术生成

对于高并发我们以最常见最具代表性的商城商品详情页为例,来看看我们如何从最简单的crud进行优化的。

1.直接访问数据库

        我们直接访问数据库。

public PmsProductParam getProductInfo1(Long id) {
        PmsProductParam productInfo = portalProductDao.getProductInfo(id);
        if (null == productInfo) {
            return null;
        }
        FlashPromotionParam promotion = flashPromotionProductDao.getFlashPromotion(id);
        if (!ObjectUtils.isEmpty(promotion)) {
            productInfo.setFlashPromotionCount(promotion.getRelation().get(0).getFlashPromotionCount());
            productInfo.setFlashPromotionLimit(promotion.getRelation().get(0).getFlashPromotionLimit());
            productInfo.setFlashPromotionPrice(promotion.getRelation().get(0).getFlashPromotionPrice());
            productInfo.setFlashPromotionRelationId(promotion.getRelation().get(0).getId());
            productInfo.setFlashPromotionEndDate(promotion.getEndDate());
            productInfo.setFlashPromotionStartDate(promotion.getStartDate());
            productInfo.setFlashPromotionStatus(promotion.getStatus());
        }
        return productInfo;
    }

        当我们的单机访问量过大,必然会降低我们的吞吐量,延长我们的访问时间,甚至可能造成数据库连接超时的报错。

        记录下我们的压测结果,并且能够看到我们存在7.16%的异常值,说明出现了数据库连接超时的报错。

2.引入redis作为缓存

        直接上代码,我们先从redis中取,如果拿不到的话再去查询数据库并设置redis,拿到了就直接返回。这里需要注意一点,就是我们在设置redis时要设置超时时间,以保证数据库和redis的最终一致性,如果想要保证时时一致性的话,可以使用canal。

public PmsProductParam getProductInfo(Long id){
        PmsProd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值