缓存

对于经常访问的数据,每次都从数据库(硬盘)中获取是比较慢,可以利用性能更高的存储来提高系统响应速度,俗称缓存 。合理使用缓存可以显著降低数据库的压力、提高系统性能。
那么,什么样的数据适合缓存呢?一般情况下就4个字“读多写少 ”,要频繁查询的、不怎么修改的。
具体来说:

  1. 高频访问的数据:如系统首页、热门推荐内容等。
  2. 计算成本较高的数据:如复杂查询结果、大量数据的统计结果。
  3. 允许短时间延迟的数据:如不需要实时更新的排行榜、图片列表等。
    在我们的项目中,主页是用户高频访问的内容,调用的获取图片列表的接口也是高频访问的。而且即使数据更新存在一定延迟,也不会对用户体验造成明显影响,因此非常适合缓存。

Redis分布式缓存

分布式缓存是指将缓存数据分布存储在多台服务器上,以便在高并发场景下提供更高的吞吐量和更好的容错性。
Redis是实现分布式缓存的主流方案,也是后端开发必学的技能。主要是由于它具有下面几个优势:

  • 高性能:基于内存操作,访问速度极快。单节点 Redis的读写QPS可达10w次每秒!
  • 丰富的数据结构:支持字符串、列表、集合、哈希、位图等,适用于各种数据结构存储。
  • 分布式支持:可以通过RedisCluster构建高可用、高性能的分布式缓存,还提供哨兵集群机制提升可用性、提供分片集群机制提高可扩展性。

缓存设计

需要缓存首页的图片列表数据,也就是对 listPictureVOByPage接口进行缓存。首先按照缓存3要素"key、value、过期时间”进行设计。

  1. 缓存 key 设计
    由于接口支持传入不同的查询条件,对应的数据不同,因此需要将查询条件作为缓存key的一部分。
    可以将查询条件对象转换为JSON字符串,但这个JSON会比较长,可以利用哈希算法(md5)来压缩key。
    此外,由于使用分布式缓存,可能由多个项目和业务共享,因此需要在key的开头拼接前缀进行隔离。设计出的key如下:
    yunpicture:listPictureVOByPage:${查询条件key}
  2. 缓存 value 设计
    缓存从数据库中查到的Page分页对象,存储为什么格式呢?这里有2种选择:
  • 为了可读性,可以转换为JSON结构的字符串
  • 为了压缩空间,可以存为二进制等其他结构
    但是对应的 Redis 数据结构都是 string。
  1. 缓存过期时间设置
    必须设置缓存过期时间! 根据实际业务场景和缓存空间的大小、数据的一致性的要求设置,合适即可,此处由于查询条件较多、而且考虑到图片会持续更新,设置为5~60分钟即可。

Caffeine 本地缓存

当应用需要频繁访问某些数据时,可以将这些数据缓存到应用的内存中(比如JVM中);下次访问时,直接从内存读取,而不需要经过网络或其他存储系统。
相比于分布式缓存,本地缓存的速度更快,但是无法在多个服务器间共享数据、而且不方便扩容。
所以本地缓存的应用场景一般是:

  • 数据访问量有限的小型数据集
  • 不需要服务器间共享数据的单机应用
  • 高频、低延迟的访问场景(如用户临时会话信息、短期热点数据)。
    对于Java项目,Caffeine是主流的本地缓存技术,拥有极高的性能和丰富的功能。比如可以精确控制缓存数量和大小、支持缓存过期、支持多种缓存淘汰策略、支持异步操作、线程安全等。
    由于本地缓存不需要引入额外的中间件,成本更低。因此如果只是要提升数据访问性能,优先考虑本地缓存而不是分布式缓存。

缓存设计

本地缓存的设计和分布式缓存基本一致,不再赞述。但有2个区别:

  1. 本地缓存需要自己创建初始化缓存结构(可以简单理解为要自己new一个HashMap)。
  2. 由于本地缓存本身就是服务器隔离的,而且占用服务器的内存,key可以更精简一些,不用再添加项目前缀。

多级缓存

多级缓存是指结合本地缓存和分布式缓存的优点,在同一业务场景下构建两级缓存系统,这样可以兼顾本地缓存的高性能、以及分布式缓存的数据一致性和可靠性。
多级缓存的工作流程:

  1. 第一级(Caffeine本地缓存):优先从本地缓存中读取数据。如果命中,则直接返回。
  2. 第二级(Redis分布式缓存):如果本地缓存未命中,则查询Redis分布式缓存。如果Redis命中,则返回数据并更新本地缓存。
  3. 数据库查询:如果Redis也未命中,则查询数据库,并将结果写入Redis和本地缓存。

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

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

相关文章

SLAM中的非线性优化-2D图优化之零空间(十五)

这节在进行讲解SLAM中一个重要概念,零空间,讲它有啥用呢?因为SLAM中零空间的存在,才需要FEJ或固定约束存在,本节内容不属于2D图优化独有,先看看什么是零空间概念;零空间是一个核心概念&#xff…

如何解决本地DNS解析失败问题?以连接AWS ElastiCache Redis为例

在云服务开发中,DNS解析问题常常成为困扰开发者的隐形障碍。本文将通过AWS ElastiCache Redis连接失败的实际案例,详细介绍如何诊断和解决DNS解析问题,帮助你快速恢复服务连接。 引言 在使用 telnet 或 redis-cli 连接 AWS ElastiCache Redis 时,有时会遇到类似以下错误:…

探索钉钉生态中的宜搭:创建与分享应用的新视界

在当今快速发展的数字化时代,企业对于高效协作和信息管理的需求日益增长。作为阿里巴巴集团旗下的智能工作平台,钉钉不仅为企业提供了强大的沟通工具,其开放的生态系统也为用户带来了无限可能。其中,宜搭(YiDa&#xf…

深入理解事务和MVCC

文章目录 事务定义并发事务代码实现 MVCC定义核心机制 事务 定义 什么是事务? 事务是指一组操作要么全部成功,要么全部失败的执行单位。 在数据库中,一个事务通常包含一组SQL语句,系统保证这些语句作为一个整体执行。 为什么引…

用 Python 绘制精美雷达图:多维度材料属性对比可视化全指南

🌟 为什么选择雷达图?从材料科学到多维数据对比的可视化利器 在科研和数据分析领域,当我们需要同时展示多个维度的数据对比时,传统的柱状图或折线图往往显得力不从心。这时候,雷达图(Radar Chart&#xff…

Excel学习03

超级表与图表 Excel中具有超级表的功能。所谓超级表(官方名称为“表格”,快捷键CtrlT)是Excel中一个强大的数据管理工具,它将普通的数据区域转换为具有只能功能的交互式表格。 这就是表格变为超级表的样子。超级表默认具备冻结窗…

Netflix 网飞的架构演进过程、Java在网飞中的应用|图解

写在前面 上一篇文章中,我们讲解了网飞当前的架构,但网飞的架构并不是一开始就是这样的,而是不断演进发展才是当前的样子。 这篇文章我们就来讲讲网飞架构的演进过程。 第一阶段:Zuul Gateway REST API 使用 Zuul 作为API网关…

使用ros2服务实现人脸检测2-人脸检测功能实现(适合0基础小白)

文章目录 一、用到的库二、使用步骤1.引入库2.获取图片真实路径3.检测人脸4.绘制人脸5.显示结果6.更改setup.py7.完整代码 三、结果展示 一、用到的库 face_recognition:实现在图片中检测人脸。 cv2:显示图片,并且可以在图像中展示检测结果。…

中国农村统计年鉴-Excel版(1985-2024年)

《中国农村统计年鉴》系统收录了全国和各省农村社会经济统计数据,以及近年全国农村主要统计数据,是一部全面反映我国农村社会经济情况的资料性年刊。年鉴内容覆盖农村人口结构、农业产值、主要农产品产量、市场物价、进出口贸易以及收入消费水平等社会经…

golang pprof性能调试工具

简介 pprof是性能调试工具,可以生成类似火焰图、堆栈图,内存分析图等。 整个分析的过程分为两步:1. 导出数据,2. 分析数据。

PPIO × 302.AI:三分钟搭建可共享的聊天机器人

最近,各主流模型厂商频频发布新模型,有一如既往强大的DeepSeek-R1-0528,擅长长输入推理的MiniMax-M1-80k…… 好用的AI大模型这么多,如何才能集成在一个应用自由使用呢?302.AI作为企业级AI应用平台支持各主流模型调用&…

怎么样在自己的网站/独立站中添加视频?

文章目录 **前言** 一、视频在网站/独立站的好处二、视频嵌入网站的原理三、如何简易地把视频嵌入到独立站中? 前言 在信息传播形式日益多元化的当下,静态文字与图片早已无法满足用户对沉浸式浏览体验的需求。视频以其动态画面、声音及文字相结合的特性…

【图像处理基石】什么是摄影的数码味?

“数码味”是一个摄影术语,通常指照片看起来不自然,有过度处理的痕迹,比如色彩过于鲜艳、对比度偏高、高光过曝、阴影死黑,或者有明显的锐化痕迹和噪点。这种现象在手机摄影中尤为常见,因为手机相机的自动算法往往会为…

报表控件stimulsoft教程:在报表、仪表板和 PDF 表单自动生成缩略图

了解缩略图的工作原理在使用Stimulsoft Demo、Stimulsoft Server和Stimulsoft Cloud时非常有用。例如,您可以在此处查看缩略图的实际效果 - 当侧边栏折叠时,将显示缩略图而不是资源列表。在本文中,我们将探讨 Stimulsoft 产品中报表、仪表板和…

变分自编码器(VAE)

1. 从自编码器(AE)到变分自编码器(VAE) 自编码器(AutoEncoder, AE) 基本结构: 自编码器是一种无监督学习模型,通常由两个部分组成: 编码器(Encoder)&…

ChatboxAI 搭载 GPT 与 DeepSeek,引领科研与知识库管理变革

文章摘要:本文深入探讨 ChatboxAI 在科研领域的应用优势。ChatboxAI 集成多模型,支持全平台,能高效管理科研知识,助力文献检索、实验设计与论文撰写,提升科研效率与质量,同时保障数据安全。其知识库功能可整…

【无刷电机FOC进阶基础准备】【04 clark变换、park变换、等幅值变换】

目录 clark变换park变换等幅值变换 其实我不太记得住什么是clark变换、park变换,我每次要用到这个名词的时候都会上网查一下,因为这就是两个名词而已,但是我能记住的是他们背后的含义。 经过【从零开始实现stm32无刷电机FOC】系列后应该对cla…

Sentinel的流控策略

在 Sentinel 中,流控策略(Flow Control Strategy)用于定义如何处理请求的流量,并决定在流量达到某个阈值时采取的行动。流控策略是实现系统稳定性和高可用性的核心机制,尤其在高并发环境中,确保服务不会因过…

Ubuntu Extension Manager 插件卸载

Ubuntu 上使用Extension Manager 安装插件,但目前无法在Extension Manager 中卸载。 卸载方式可以通过 gnome-extensions 命令进行卸载: Usage:gnome-extensions COMMAND [ARGS…]Commands:help Print helpversion Print versionenable Enabl…

深度学习中Embedding原理讲解

我们用最直白的方式来理解深度学习中 Embedding(嵌入) 的概念。 核心思想一句话: Embedding 就是把一些复杂、离散的东西(比如文字、类别、ID)转换成计算机更容易理解和计算的“数字密码”,这些“数字密码…