短视频全套源码,解决缓存击穿的常用方案

短视频全套源码,解决缓存击穿的常用方案

一、设置合理的过期时间

固定过期时间:为短视频全套源码中的热点数据设置一个合理的固定过期时间,可以有效地减少数据库的访问频率,但不能完全避免缓存击穿问题。
随机过期时间:通过为短视频全套源码中的缓存设置不同的随机过期时间,可以使缓存失效的时间点分散,减少同时大量请求数据库的概率。

@Autowired
private StringRedisTemplate redisTemplate;public String getDataWithRandomExpiration(String key) {String value = redisTemplate.opsForValue().get(key);if (value == null) {value = fetchDataFromDatabase(key);// 设置一个5到10分钟的随机过期时间long timeout = 5L + new Random().nextInt(5);redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.MINUTES);}return value;
}private String fetchDataFromDatabase(String key) {return "database-value";
}

 

二、使用互斥锁

单体应用中的互斥锁:在访问数据库前,使用 Java 的 synchronized 关键字或 ReentrantLock 类实现互斥锁。
分布式环境的互斥锁:使用 Redis 的 SETNX 命令实现分布式锁,确保同一时间只有一个请求去短视频全套源码数据库中查询数据并更新缓存。

@Autowired
private StringRedisTemplate redisTemplate;public String getDataWithLock(String key) {String value = redisTemplate.opsForValue().get(key);if (value == null) {String lockKey = "lock:" + key;Boolean acquired = redisTemplate.opsForValue().setIfAbsent(lockKey, "1", 10, TimeUnit.SECONDS);if (Boolean.TRUE.equals(acquired)) {try {value = redisTemplate.opsForValue().get(key);if (value == null) {value = fetchDataFromDatabase(key);redisTemplate.opsForValue().set(key, value, 10, TimeUnit.MINUTES);}} finally {redisTemplate.delete(lockKey);}}}return value;
}

 

三、布隆过滤器

使用布隆过滤器预先判断请求的数据是否可能存在于短视频全套源码的数据库中,这样可以避免对不存在的数据进行大量的数据库查询,减少数据库的无效访问。

@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private BloomFilter<String> bloomFilter;public String getDataWithBloomFilter(String key) {if (!bloomFilter.mightContain(key)) {return null;  // 假设数据不在数据库中
    }String value = redisTemplate.opsForValue().get(key);if (value == null) {value = fetchDataFromDatabase(key);redisTemplate.opsForValue().set(key, value, 10, TimeUnit.MINUTES);}return value;
}

 

四、永不过期策略

对于短视频全套源码中某些极为重要的热点数据,可以考虑将它们设置为永不过期,同时通过后台线程定期更新这些数据。这种策略虽然保持数据的实时性不如上述方法,但可以最大限度防止数据库的突发访问压力。

@Autowired
private StringRedisTemplate redisTemplate;public String getAlwaysValidData(String key) {String value = redisTemplate.opsForValue().get(key);if (value == null) {value = fetchDataFromDatabase(key);redisTemplate.opsForValue().set(key, value);  // 没有设置过期时间
    }return value;
}

 

以上就是短视频全套源码,解决缓存击穿的常用方案, 更多内容欢迎关注之后的文章

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/800845.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息收集第二波

情境 参加了培训的第五次培训, 涉及到了更多的 信息收集基础工具, 感觉自己没有好好学, 没学到, 没学懂, 有点难受, 一点都不优雅…… 在强力压缩饼干作用下的简而言之, 这周我有幸瞻和接触到了 这些工具和内容: Nmap, 敏感信息收集, 信息深度收集, AWVS, X-Scan, AppScan, Xra…

Nexpose 6.6.270 发布下载,新增功能概览

Nexpose 6.6.270 发布下载,新增功能概览Nexpose 6.6.270 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Sep 18, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org您的…

opencascade Bnd_Box源码学习 包围盒

opencascade Bnd_Box 包围盒 前言 描述一个三维空间中的包围盒一个包围盒与坐标系的轴线平行。如果它是有限的,则由三个区间定义:[Xmin, Xmax], [Ymin, Ymax], [Zmin, Zmax]。一个包围盒在一个或多个方向上可能是无限的(即开放的)。它被称为:OpenXmin 如果它在“X方向”…

用户验收测试指南6计划

6 计划 我们需要像开始任何重要工作一样开始我们的 UAT 工作--决定我们要实现的目标是什么。当我们开始进行 UAT 时,您可能会认为这应该已经很明确了,但请记住,变化是计划的魔咒。很多事情都会偏离最初的计划和要求--有偶然的,也有蓄意的。此时此刻,我们必须最终确定我们认…

【文化课学习笔记】【物理】电场

高中物理学习笔记:电场【物理】电场 前置知识 绝缘体:本质是物体内部电荷无法自由移动。 导体:本质是物体内部电荷可以自由移动。 电荷的移动:导体内部能够发生自由移动的电荷只有负电荷。 显电性:显示的电性,是内部的正负电荷中和之后的结果,不是一定带有几个单位的正电…

Shiro-721—漏洞分析(CVE-2019-12422)

Shiro-721漏洞的简单分析与总结(CVE-2019-12422)目录Padding Oracle Attack 原理PKCS5填充怎么爆破攻击漏洞原理源码分析漏洞复现本文基于shiro550漏洞基础上分析,建议先看上期内容: https://blog.csdn.net/weixin_60521036/article/details/142373353Padding Oracle Attack …

node环境搭建、npm及pnpm安装

1.背景最近换了笔记本,重新搭建了环境,顺手记录下脚本之类的,后续再遇到懒得一个个文件夹创建了。2.node及npm安装 2.1 解压安装 我习惯安装的是解压版:点击此处下载下载完成后,会得到压缩包,解压到指定位置即可。例如,我放在了: D:\toolkit\node\20.17.0解压后的文件中…

pnpm-配置环境目录(win脚本)

1.背景最近换了笔记本,重新搭建了环境。装完node后一般咱们会换到pnpm,这里记录下配置pnpm环境的脚本,懒得一个个文件夹创建了。文件夹名称 作用.pnpm-bin-dir 存放全局安装的可执行文件路径,方便在命令行中直接调用这些工具。.pnpm-cache 用于存储下载的包的缓存,加速后续…

大数据与人工智能-平台搭建准备之VM虚拟机与centos网络配置

一.前提(前提可以不看): 准备好需要的JDK,HADOOP,HIVE……等一些列组建安装包。 rpm -ivh –nodeps xxxx.rpm 可以强制安装本地xxxx软件包 为了提高虚拟机运行速度,可以关闭Cent os7的图形化界面:查看默认的target,执行:systemctl get-default开机以命令模式启动,执行…

游戏技术

目录显示相关的术语每个帧的像素:分辨率多个帧的刷新:刷新率、帧率每个像素的颜色编码码率显卡渲染技术DLSS2 牺牲画质 提高帧率DLSS3 进一步提高帧率 刷新更流畅 显示相关的术语 每个帧的像素:分辨率 分辨率 = 水平宽度的像素数(列数) x 垂直高度的像素数(行数)速记 分辨率…

痞子衡嵌入式:如果i.MXRT离线无法启动,试着分析ROM启动日志

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT系列MCU的ROM启动日志。关于 i.MX RT 启动问题解决的文章,痞子衡写过非常多,其中大部分都是具体到某一类启动设备下的具体问题分析,比较依赖经验,这些经验当然是非常有用的。此外也有一篇 《…