Java学习 - Redis缓存问题与优化

缓存收益与成本

  • 收益
    • 加速读写
    • 降低后端、持久层的负载和压力
  • 成本
    • 可能导致数据不一致
    • 代码运维成本
    • redis节点运维成本

缓存更新策略

策略一致性维护成本介绍
LRU/LIRS算法剔除最差剔除最近最少使用的数据
超时剔除较差定时删除、惰性删除
主动更新最好持久层更新,缓存层也更新

缓存粒度

  • 缓存粒度概念

    • 缓存中数据存储的规模
    • 全部存储、部分存储
  • 全部存储、部分存储对比

    存储方式通用性占用空间代码维护
    部分存储
    全部存储

缓存雪崩

  • 缓存雪崩概念
    • 由于缓存层宕机了,导致前端流量全部涌向持久层
    • 从而造成连锁反应,持久层也宕机了
  • 缓存雪崩解决方法
    • 使用redis-sentinel和redis-cluster增强redis的高可用性
    • 提前演练

缓存无底洞

  • 缓存无底洞概念
    • 当缓存集群中机器过多,且数据部分太分散时
    • 如果客户端的一个命令,需要从多个节点中获取数据才能完成
    • 那么可能由于网络传输的问题,导致机器越多,执行越慢
  • 缓存无底洞解决
    • 减少网络请求的次数
    • 降低网络请求带来的消耗,比如加入连接池等等

缓存穿透

  • 缓存穿透概念

    • 大量的请求不命中,既不命中redis也不命中持久层

    • 示意图

      在这里插入图片描述

  • 缓存穿透产生原因

    • 业务代码有问题,使用户请求一些不存在或不能访问的数据
    • 恶意攻击,爬虫
  • 缓存穿透发现

    • 响应请求的时间
    • 查看日志记录
  • 缓存穿透解决方法

    • 方法1:缓存空对象

      • 原理:当请求一个不存在的数据时,在redis层存储一个空对象

        在这里插入图片描述

      • 缺点:占用更多的空间;可能导致数据不一致

    • 方法2:布隆过滤器

      • 原理:使用布隆过滤器
      • 缺点:很难设计和使用

热点key重建

  • 热点key重建概念

    • 当一个数据突然成为热点时(比如微博的热点),且整个数据之前并没有在缓存时
    • 由于服务器是高并发的,所以可能会有多个线程都进行将热点数据写入缓存的操作
    • 这样很多的重复操作会带来非常大的性能消耗
  • 热点key解决方法

    • 使用互斥锁
      • 原理:一个线程在准备重建时进行加锁,则其他线程不能再重建
      • 缺点:可能导致大量的线程在等待
    • 永远不过期策略
      • 【不懂】
  • 两种方法对比

    方案优点缺点
    互斥锁思路简单;保持一致性存在死锁风险;可能很多线程等待
    永远不过期策略杜绝很多线程等待问题不保证一致性

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

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

相关文章

监控 Promethus的监控告警Alertmanager、Grafana

Promethus的监控告警Alertmanager Alertmanager 介绍 Prometheus的一个组件,用于定义和发送告警通知,内置多种第三方告警通知方式,同时还提供了对Webhook通知的支持基于警报规则对规则产生的警报进行分组、抑制和路由,并把告警发…

深入了解Spring框架的模块组成

目录 Spring CoreSpring ContextSpring AOPSpring DAOSpring ORMSpring WebSpring MVCSpring WebFluxSpring TestSpring BootSpring SecuritySpring BatchSpring IntegrationSpring Cloud结论 Spring Core 1.1 核心容器 Spring Core模块是整个Spring框架的基础。它包含了框架…

vue如何引入图标

方法1&#xff1a;iconify/vue pnpm add iconify/vue -D 网址&#xff1a;https://icon-sets.iconify.design/ 使用哪个需要安装 如下截图,安装指令&#xff1a; > npm install iconify/icons-gg在使用的页面引入 import { Icon } from “iconify/vue”; <template>…

Mysql存储过程用法:使用存储过程编程,来判断数据库中数据表中的字段是否重复,避免重复插入记录

目录 一、mysql的存储过程介绍 二、. 创建存储过程 1、准备 2、创建插入记录的存储过程 三. 调用存储过程 四. 删除存储过程 五. 修改存储过程&#xff0c;避免数据表的姓名出现重复 1、修改存储过程的方式 2、重新创建存储过程 六. 验证新的存储过程 1、插入新的记…

高考后的抉择:专业优先还是学校优先?

随着2024年高考的帷幕落下&#xff0c;高考生们面临的一个重要抉择再度浮上心头&#xff1a;在分数受限的情况下&#xff0c;是选择一个心仪的专业&#xff0c;还是选择一个知名度更高的学校&#xff1f;这是一个困扰了众多考生和家长的长期难题。在这个关键的时刻&#xff0c;…

好用的导航网站有哪些

网址导航网站是我们日常上网的一个重要工具。它们不仅可以帮助我们快速找到所需的资源和信息&#xff0c;还能提高我们的工作效率。以下是小编收藏的几个好用的导航网站&#xff0c;涵盖了办公、学习、娱乐等多个领域&#xff0c;分享给大家。 1. 办公人导航 办公人导航是一个…

Drag Select Compose:实现多平台图片多选功能的利器

Drag Select Compose:实现多平台图片多选功能的利器 在现代移动应用开发中,图片多选功能是一个常见且实用的需求。而实现这种功能可能涉及到复杂的手势处理和状态管理。今天,我将介绍一款强大的Compose多平台库——Drag Select Compose,它能够轻松实现类似于Google Photos…

【鸿蒙】第2天・装饰器・组件和页面生命周期

背景知识 &#xff11;・ArkTS 拓展了 TypeScript&#xff0c;TypeScript 拓展了 JavaScript。 增加了一些约束。 &#xff12;・ArkTS 是声明式编程。 构建对象时类似构建者设计模式。链式赋值。 装饰器 &#xff20;Component 自定义组件 Component装饰器仅能装饰str…

BGP中的TCP连接源地址问题

3.TCP连接源地址&#xff08;用loop back地址是最优选择&#xff09; 应用场景与理论&#xff1a; 由于BGP应用于大型网络中&#xff0c;为了避免单点失败&#xff0c;往往需要通过多条链路连接&#xff0c;当一条链路故障时候就用另一条链路继续工作&#xff0c;但是BGP又无法…

为何重要?解析企业实行网络安全等级保护的必要性

在全球信息化迅速发展的背景下&#xff0c;企业数据资产成为核心竞争力的重要组成部分。然而&#xff0c;随之而来的网络安全威胁亦日益严峻&#xff0c;从数据泄露到勒索软件攻击&#xff0c;每一次安全事件都可能给企业带来不可估量的损失。在此情境下&#xff0c;实行网络安…

Java IO: 使用 FileReader 和 FileWriter 进行文件操作

在 Java 中&#xff0c;进行文件操作是一个常见的任务。FileReader 和 FileWriter 是用于读取和写入文本文件的类&#xff0c;它们提供了一种方便的方法来处理文件内容。本文将介绍如何使用 FileReader 和 FileWriter&#xff0c;并提供一些示例代码。 FileReader 类概述 Fil…

使用PHP创建一个简单的Web爬虫

随着互联网的不断发展&#xff0c;信息的获取变得越来越方便。然而&#xff0c;海量的信息也给我们带来了很多的烦恼&#xff0c;如何高效地获取到我们所需要的信息就成了一项非常重要的任务。在实现自动化获取信息的过程中&#xff0c;web爬虫被广泛应用。 Web爬虫是一种自动…

R语言进行字符的替换和删减gsub,substr函数

目录 R语言读文件“-“变成“.“ 提取列字符前几个 提取列字符末尾几个 进行字母替换 paste0函数使用</

学计算机的学生假期可以干什么?

学习目标&#xff1a; 学计算机的学生假期可以干什么 学习内容&#xff1a; 实习&#xff1a;寻找计算机相关领域的实习机会&#xff0c;积累工作经验。这对你未来找工作非常有帮助。在线课程&#xff1a;参加编程、数据科学或其他技术领域的在线课程&#xff0c;提升技能。公…

python实现API调用缓存

python实现API调用缓存 1.代码2.输出3.保存的json数据 想把python某些函数的参数及返回值记录下来,如果之前已计算过,则直接返回缓存中的数据 1.代码 import jsondef get_variable_name(var):变量转变量名local_varsglobals()return [name for name, value in local_vars.ite…

螺旋模型:结合瀑布模型和增量模型的项目管理利器

目录 前言1. 螺旋模型概述1.1 螺旋模型的核心理念1.2 螺旋模型的四个阶段 2. 螺旋模型的详细步骤2.1 计划阶段2.2 风险分析阶段2.3 工程阶段2.4 评估阶段 3. 螺旋模型在大型项目中的应用3.1 应对需求变化3.2 有效的风险管理3.3 增强的客户参与3.4 灵活的资源分配 4. 螺旋模型的…

redis分布式事务

1. 使用RedisTemplate.opsForValue().setIfAbsent(key, value, time, TimeUnit.SECONDS) 这种方法是基于Redis的SET命令的NX&#xff08;Not eXists&#xff09;选项和EX&#xff08;expiry time&#xff09;选项来实现的。它尝试设置一个键值对&#xff0c;只有当键不存在时才…

git-extras

当使用 git-extras 时&#xff0c;除了安装和基本命令之外&#xff0c;了解如何结合常见的 Git 工作流程和实际开发需求会更加有帮助。下面是一个更全面的 git-extras 使用教程&#xff0c;涵盖了安装、常见命令以及实际应用场景的示例。 1. 安装 git-extras 在 macOS 上&…

Java面试题:讨论单例模式的实现方式,包括懒汉式和饿汉式,并讨论线程安全问题

单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。单例模式在某些场景下很有用&#xff0c;例如配置管理、日志记录等。以下是单例模式的两种主要实现方式&#xff1a;懒汉式&#xff08…

【Python】已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv’ 一、分析问题背景 在编写Python代码进行文件操作时&#xff0c;开发者可能会遇到…