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

石家庄免费自助建站模板wordpress 主题商店

石家庄免费自助建站模板,wordpress 主题商店,加强网站建设的意见,网站建设背景是什么一 Redis雪崩、穿透和击穿 1. Redis雪崩#xff1a; Redis雪崩是指在某一时刻#xff0c;缓存中大量的缓存数据同时失效或过期#xff0c;导致大量的请求直接打到后端数据库#xff0c;导致数据库负载剧增#xff0c;引发性能问题甚至崩溃。这通常是因为缓存数据的过期时…一 Redis雪崩、穿透和击穿 1. Redis雪崩  Redis雪崩是指在某一时刻缓存中大量的缓存数据同时失效或过期导致大量的请求直接打到后端数据库导致数据库负载剧增引发性能问题甚至崩溃。这通常是因为缓存数据的过期时间设置过于集中或者在同一时间段内大量缓存同时失效造成的。 2. Redis穿透  Redis穿透是指恶意或者异常请求查询一个不存在于缓存和数据库中的数据导致每次请求都会直接访问数据库增加了数据库负担。这可能是攻击者故意进行的也可能是由于业务逻辑问题造成的。 3. Redis击穿  Redis击穿是指某个热点数据突然失效或被删除而此时大量请求正好同时访问该热点数据导致这些请求都直接打到数据库上导致数据库压力激增。与雪崩不同击穿是因为某个特定的缓存数据失效导致。 示例 让我们以一个简单的Java代码示例来说明Redis雪崩、穿透和击穿的概念。 假设有一个电影信息查询系统用户可以根据电影ID查询电影信息。我们使用Redis作为缓存来存储电影信息但是只对热门电影设置了缓存其他电影没有被缓存。 Service public class MovieService {Autowiredprivate MovieRepository movieRepository;Autowiredprivate Jedis jedis;public Movie getMovieInfo(String movieId) {String cacheKey movie: movieId;String cachedInfo jedis.get(cacheKey);if (cachedInfo null) {Movie movie movieRepository.findById(movieId);if (movie ! null) {jedis.setex(cacheKey, 3600, movie.toString()); // 缓存1小时return movie;}}return Movie.fromString(cachedInfo);} }Redis雪崩示例 假设在某一时刻缓存中存储了很多电影信息这些缓存在同一时间内同时失效导致大量请求直接访问数据库造成数据库压力激增。 Redis穿透示例 有一个恶意用户不断发送不存在的电影ID每次请求都会绕过缓存直接查询数据库导致数据库压力增加。 Redis击穿示例 假设某个热门电影的缓存在某个时间点失效而在这个时间点正好有大量用户同时查询该电影信息导致所有请求直接访问数据库造成数据库压力激增。 二 解决方案 2.1 对缓存数据的过期时间进行随机化避免集中失效。 选择随机时间范围 首先你需要选择一个适当的随机时间范围用于分散缓存数据的过期时间。例如你可以选择在原始过期时间基础上添加一个随机的秒数这样每个缓存项的过期时间就会稍微有所不同。 生成随机时间 在获取缓存数据时生成一个随机的秒数然后将其添加到原始过期时间上得到一个新的过期时间。 设置缓存数据 将缓存数据存储到Redis中并设置使用上一步生成的新过期时间。   Service public class CacheService {Autowiredprivate Jedis jedis;public String getCachedData(String key) {String cachedData jedis.get(key);if (cachedData null) {// 查询数据库获取数据String dbData Database.queryData(key);if (dbData ! null) {// 生成随机的过期时间在1小时基础上随机增加0-300秒int originalExpireTime 3600; // 1小时的秒数int randomSeconds new Random().nextInt(300); // 0到300秒的随机数int cacheDuration originalExpireTime randomSeconds;// 将数据存储到缓存并设置随机过期时间jedis.setex(key, cacheDuration, dbData);return dbData;}}return cachedData;} }2.2 使用布隆过滤器来过滤恶意请求防止缓存穿透。 使用布隆过滤器来过滤恶意请求以防止缓存穿透是一种常见的防御策略。布隆过滤器是一种数据结构用于判断一个元素是否存在于集合中它可以高效地进行快速查询但可能会有一定的误判率。 下面是一个使用Spring Boot和布隆过滤器来防止缓存穿透的详细举例 步骤引入依赖 在Spring Boot项目中添加所需的依赖包括Spring Boot、Jedis和Google Guava用于实现布隆过滤器。初始化布隆过滤器 在启动时初始化一个布隆过滤器用于存储已查询的缓存键。查询缓存数据 在获取数据之前首先检查布隆过滤器如果缓存键可能存在则再查询缓存。import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.google.common.hash.BloomFilter; import com.google.common.hash.Funnels; import redis.clients.jedis.Jedis;Service public class CacheService {private final Jedis jedis;private final BloomFilterString bloomFilter;Autowiredpublic CacheService(Jedis jedis) {this.jedis jedis;this.bloomFilter BloomFilter.create(Funnels.stringFunnel(), 1000, 0.01); // 初始化布隆过滤器}public String getCachedData(String key) {if (!bloomFilter.mightContain(key)) { // 判断是否可能存在于集合中return null; // 不再查询缓存和数据库直接返回null}String cachedData jedis.get(key);if (cachedData null) {// 查询数据库获取数据String dbData Database.queryData(key);if (dbData ! null) {jedis.setex(key, 3600, dbData); // 缓存1小时bloomFilter.put(key); // 将键添加到布隆过滤器中return dbData;}}return cachedData;} }2.3 使用互斥锁例如分布式锁来防止击穿只允许一个请求去查询数据库其他请求等待或直接使用缓存。 使用互斥锁分布式锁来防止击穿是一种常见的策略可以确保在缓存失效的情况下只有一个请求能够去查询数据库其他请求需要等待该请求完成或直接使用缓存。下面是一个使用Spring Boot和Jedis实现分布式锁来防止击穿的代码示例 步骤1、引入依赖 在Spring Boot项目中添加所需的依赖包括Spring Boot和Jedis。2、获取分布式锁 在查询数据库之前使用分布式锁来确保只有一个请求能够进行数据库查询。3、释放分布式锁 在查询完成后释放分布式锁让其他请求能够继续执行Service public class CacheService {Autowiredprivate Jedis jedis;public String getCachedData(String key) {String cachedData jedis.get(key);if (cachedData null) {// 尝试获取分布式锁设置锁的过期时间防止死锁String lockKey lock: key;String lockValue lockValue;SetParams params new SetParams().ex(60).nx(); // 设置60秒过期时间只有不存在时才设置String acquiredLock jedis.set(lockKey, lockValue, params);if (acquiredLock ! null) {try {// 查询数据库获取数据String dbData Database.queryData(key);if (dbData ! null) {jedis.setex(key, 3600, dbData); // 缓存1小时return dbData;}} finally {// 释放分布式锁jedis.del(lockKey);}} else {// 等待一段时间后重新查询缓存try {Thread.sleep(200); // 可以根据实际情况调整等待时间} catch (InterruptedException e) {Thread.currentThread().interrupt();}// 重新查询缓存cachedData jedis.get(key);}}return cachedData;} }2.4 合理设置缓存策略确保热门数据始终保持缓存避免缓存雪崩。 确保热门数据始终保持缓存避免缓存雪崩需要采取一些合理的缓存策略。以下是一些常见的合理方案 1. 定时刷新缓存 使用定时任务或调度器定期刷新热门数据的缓存。这可以确保缓存中的数据始终保持最新避免数据过期。 2. 永不过期策略对于热门数据可以设置永不过期的缓存策略。但要注意如果热门数据发生变化需要手动更新缓存。 3. 热点数据预加载在应用启动时预先加载热门数据到缓存中确保缓存中存在最常用的数据。 4. 基于访问频率的过期策略 根据数据的访问频率动态调整过期时间。访问频率高的数据设置较长的过期时间访问频率低的数据设置较短的过期时间。 5. 分布式锁控制** 在缓存失效时使用分布式锁来防止多个请求同时查询数据库确保只有一个请求进行查询并更新缓存。 6. 降级策略 如果缓存失效可以暂时使用降级策略例如返回默认值或静态数据以避免直接访问数据库。 7. 多级缓存 使用多级缓存架构将热门数据存储在多个缓存层中例如内存缓存和分布式缓存以提高数据的访问速度和稳定性。 8. 请求合并 对于同时涌入的大量请求可以考虑将它们合并成一个请求只查询一次数据库然后将结果分发给多个请求。 9. 缓存预热 在系统负载较低的时候提前将热门数据加载到缓存中以减少在高负载时的数据库压力。 10. 动态缓存策略 根据系统的实际情况动态调整缓存策略例如根据时间段、节假日等因素来设置不同的缓存策略。 选择合适的方案取决于你的业务需求和系统特点。通常结合多个方案可以更好地保护热门数据避免缓存雪崩问题。
http://www.sadfv.cn/news/148280/

相关文章:

  • python毕业设计做网站承德网站建设价格
  • 重庆企业网站排名优化方法今天国际新闻最新消息10条
  • 网站使用方法镇江网站制作费用
  • 佛山网站建设机构国外免实名域名
  • 深圳网站公司建设方案网站推广在线推广
  • wordpress 整站音乐h5页面制作app
  • 许昌做网站网站的原型图
  • 网站建设书青岛网站建设哪家更好
  • 宁波网站建设专业定制重庆网站建设要点
  • 网站开发项目需要什么人员seo网址查询
  • 肇庆网站制作策划免费网站推广软件下载
  • 搜索不到网站的关键词天津哪家公司做企业网站
  • 音乐影视网站建设方案平台公司331名单
  • 锦州建设工程信息网站学网络技术培训学校
  • 汕头网站建设搭建广州网站建设公司
  • 喊别人做的网站不肯给代码网站开发行业发展
  • 网站首页模板设计图wordpress带会员vip主题
  • 怎样做网站卖自己的产品开平网站建设公司
  • 网站排名做不上去吗你愿意做我女朋友吗表白网站
  • 莱芜网站建设优化网站优化首页付款
  • 广州h5网站开发小型网站建设案例
  • 网站建设视频教程最新怎么做网站优化 s
  • 杂志社网站建设深圳平面设计公司排行
  • 贵州交通建设集团有限公司网站阿里云网站建设 部署与发布答案
  • dw可以做有后台的网站么整合营销中的4c指的是什么
  • 电子商务门户网站的研究与实现淄博做网络推广的公司
  • 做网站责任dw网页制做教程
  • 网站开发 在线报名凡科送审平台
  • 淘宝客自建网站网站建设免费学习
  • 长沙网站制作哪家强天津seo优化排名