缓存设计的创新之旅:架构的灵魂之一
缓存在架构设计中占有重要地位。缓存在提升性能中也扮演重要的角色。常见的有对资源的缓存,比如数据库连接池、http连接池,还有对数据的缓存等。缓存的设计可复杂也可简单,但是需要考虑的点却很多。
缓存对象
设计缓存的时候一定要考虑的是,缓存的对象是什么,缓存哪些对象。缓存对象一定是热数据,也就是频繁被访问。把对象加载到内存是以牺牲内存为代价的,如果缓存的对象不经常访问,那么就是在浪费内存,并且不但不会提升性能,还会因为命中率低的原因降低性能。
缓存的大小
因为内存是有限的,所以缓存不能无限大,那么就要决定缓存多少数据以保证内存不被撑爆。
缓存一致性
缓存一致性是必须要考虑的点。很多缓存设计都忘记了这一点,导致在使用缓存的时候经常返回过期数据。数据在更新的时候,缓存可以采用如下几个策略:1.将缓存中的数据设置为无效或者删除,再次查询的时候重新去数据库查询并更新缓存;2.更新数据时,先更新缓存,再更新数据库或者先更新缓存之后异步刷新到数据库;3.直接更新数据库,缓存定期去数据库同步最新数据,这种方式需要容忍一定时间内的不一致。缓存刷新策略一定要明确。作者本人在工作中遇到过这种情况:更新数据的接口有两个,其中一个更新缓存后更新数据库,另一个直接去更新的数据库,由于没有同步机制,导致总是偶现数据不一致的情况,而且只能重启来规避。
缓存在哪里
对于缓存数据的存储位置也是需要考虑的。如果是分布式系统或者近期会重构成分布式的系统,缓存需要集中存储,比如使用redis做缓存。如果是单机系统,最简单的方式就是缓存到内存中。缓存的存储位置的访问一定要快于数据的存储位置,不然缓存就没有意义了。
缓存流程
缓存流程
经典缓存问题
1.缓存穿透
缓存穿透是指客户端访问即不在缓存中的数据又不在数据库中的数据。这种访问过多会导致数据库挂掉影响正常访问。对于这种问题,可以在数据访问前做校验,过滤掉不存在的数据访问,必须不合法的查询字段或者使用布隆过滤器,筛选掉不存在的数据;也可以将不存在的数据在缓存中建立空值缓存。
2.缓存击穿
缓存击穿是指客户端访问不在缓存中但数据库中存在的数据。如果对某个key的访问量很大,这个时候缓存过期了,那么就会有很多的访问漏到数据库层面去访问数据。这个问题可以采用如下方法解决:热点数据常驻缓存;访问在缓存中没有拿到数据,在需要去数据库中访问数据时加锁处理,只漏过一个访问去数据库查询数据,并将数据更新到缓存,其他访问加锁失败,后续从缓存中取数据。
3.缓存雪崩
缓存雪崩是指大量的key过期,导致访问落到数据库上。这个问题的解决方法如下:
1.每个缓存数据设置不同的缓存时间,避免大量的缓存同时过期;
2.添加的节点预热。在需要添加缓存节点的时候,先做缓存预热,避免大量访问未命中的情况;
3.对于热点数据的判断采用延迟的策略。在访问缓存中不存在的数据的时候,不直接将它设置成最热数据,而是设置到缓存数据按热度排序中间的位置,避免某一时刻大量访问冷数据导致热数据被剔除缓存的情况。
建议
不建议在架构设计的最初阶段就采用缓存。首先,采用缓存容易掩盖一些问题,比如业务逻辑导致的性能低下在由于缓存的存在在初期不容易暴露;再有就是在最初阶段有的时候很难去判断什么是热数据什么是冷数据,需要缓存什么;如果已经确定要在系统中引入缓存那么一定要考虑好上面的几点。
相关文章:
缓存设计的创新之旅:架构的灵魂之一
缓存在架构设计中占有重要地位。缓存在提升性能中也扮演重要的角色。常见的有对资源的缓存,比如数据库连接池、http连接池,还有对数据的缓存等。缓存的设计可复杂也可简单,但是需要考虑的点却很多。 缓存对象 设计缓存的时候一定要考虑的是&…...
Unnatural Instructions: Tuning Language Models with (Almost) No Human Labor
本文是LLM系列文章,针对《Unnatural Instructions: Tuning Language Models with (Almost) No Human Labor》的翻译。 TOC 摘要 指令调优使预训练的语言模型能够从推理时间的自然语言描述中执行新的任务。这些方法依赖于以众包数据集或用户交互形式进行的大量人工…...
uniapp中全局页面挂载组件(H5)
前言 我们已经学习了 uniapp中全局页面挂载组件(小程序) 有些小伙伴问在H5怎么做那让我们试一试 直接上代码 //引用组件 import dialog from ./index.vue; //我这里要把小程序的方法和h5方法写一起所以用了混入 import mixins from ./mixins.js //使用…...
设计模式(1)-设计模式前置基础知识
1,设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(Christopher Alexand…...
【05】基础知识:React组件实例三大核心属性 - props
一、props 了解 理解 1、每个组件对象都会有 props(properties的简写)属性 2、组件标签的所有属性都保存在 props 中 作用 通过标签属性从组件外向组件内传递变化的数据 注意 组件内部不要修改 props 数据 二、案例 需求:自定义用来…...
JOSEF约瑟 漏电继电器 JD1-200 工作电压:380V 孔径:45mm 50~500mA
JD1系列漏电继电器 系列型号 JD1-100漏电继电器 JD1-200漏电继电器 JD1-250漏电继电器 JD1系列漏电继电器原为分体式固定式安装,为适应现行安装场合需要,上海约瑟继电器厂在产品原JD1一体式漏电继电器基础上进行产品升级,开发出现在较为…...
[题] 差分矩阵 #差分
题目 差分矩阵 题解 只有一个操作: void insert(int x1, int y1, int x2, int y2, int c){b[x1][y1] c;b[x2 1][y1] - c;b[x1][y2 1] - c;b[x2 1][y2 1] c; }利用差分的思想,扩展到二维上。 insert函数作用是将矩阵之内的数全部加上c,…...
Studio One6.5最新版本新增了对Linux的支持
音乐制作人们,这是你们翘首以待的消息。数字音频工作站(DAW)已经成为音乐制作专业人士重要工具之一。 遗憾的是,对于 Linux 用户而言,选择十分有限。最受欢迎的选择通常是开源 DAW,如 Ardour、Audacity和闭…...
大模型引发“暴力计算”,巨头加速推进液冷“降温”
点击关注 文|姚悦 编|王一粟 一进入部署了液冷服务器的数据中心,不仅没有嘈杂的风扇声,甚至在不开空调的夏日也完全没有闷热感。 在大模型引发“暴力计算”的热潮下,数据中心的上下游,正在加紧推进液冷“…...
git log 美化配置
编辑 vim ~/.gitconfig 添加配置 [alias]lg log --graph --abbrev-commit --decorate --dateformat:%m-%d %H:%M:%S --formatformat:%C(bold blue)%h%C(reset) - %s %C(bold yellow)% d%C(reset) %n %C(dim white) (%ad) - %an%C(reset) --allgit lg 效果...
Spark 的主要组件及任务分工
Spark 是一个开源的分布式计算框架,旨在处理大规模数据集的快速计算和分析。下面是 Spark 的主要组件及其任务分工的详细介绍: Driver(驱动器):【任务调度】 负责整个 Spark 应用程序的执行和协调。解析用户程序&#…...
Apache Spark 中的 RDD是什么
目录 RDD容错性 RDD进行迭代计算 RDD是Resilient Distributed Dataset的缩写,是Apache Spark中的一个关键概念。RDD是一种分布式的内存抽象,用于将数据划分为不同的片段以进行并行计算。RDD是一个只读的数据集,可以分布在集群的不同节点上&…...
idea自动封装方法
例如 package com.utils;import java.lang.reflect.Field; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle;/*** author hrui* date 2023/10/13 13:49*/ public class DBUtils {private static ResourceBundle bund…...
js正则表达式
1.字符类 \w 匹配字母数字下划线,相当于[0-9A-Za-z_] \s 匹配单个空白字符,包括空格、制表符、回车符、换行符 \b 匹配一个词的边界 2.边界符 如果不加任何边界符,则表示包含。以下只要包含即可 // /123/ 匹配内容是否包含有123var rg …...
服务安全-应用协议rsync未授权ssh漏洞复现
目录 服务攻防-应用协议rsync&ssh漏洞复现漏洞复现配置不当-未授权访问-rsync文件备份OpenSSH 用户名枚举漏洞libssh身份验证绕过漏洞 服务攻防-应用协议rsync&ssh漏洞复现 漏洞复现 配置不当-未授权访问-rsync文件备份 rsync默认端口:873 rsync是Linux下…...
[环境搭建]OpenHarmony开发环境搭建
文章目录 1. 开发工具1.1 虚拟机1.2 Ubuntu镜像 2 虚拟机安装和配置2.1 虚拟机安装2.2 生成SSH KEY2.3 配置国内apt源&更新2.4 sh修改为bash2.5 下载OpenHarmony依赖工具2.6 python软链接2.7 samba配置 3. gitee账号注册4. 配置git和Repo4.1 git配置4.2 Repo 1. 开发工具 …...
[牛客习题]“幸运的袋子”
习题链接:幸运的袋子_牛客题霸_牛客网 题目分析 由题意可知:“幸运的袋子”的概念是——小球的数值之和大于小球的数值之积。 假如现在有5个小球:1,1,3,5,7,并将他们编号a0~a4.我们…...
安科瑞预付费系统在某大型连锁农贸市场的设计应用
安科瑞 崔丽洁 摘要 本远程预付费管理系统采用智能远程预付费电表(DTSY1352-NK/DDSY1352-NK系列),NB智能远传水表,采集各商户实时用电量、用电量总数,通过平台定时结算,结算账户余额,从而进行智…...
Spring Boot Bean 注入的常用方式教程
Spring Boot Bean 注入是一种将依赖对象引入到应用程序组件中的机制,它有助于实现松耦合和可测试的代码。这种注入方式允许我们将依赖关系委托给 Spring 容器来管理,从而提高了代码的可维护性和可读性。Spring Boot 提供了多种 Bean 注入方式,…...
Java项目调用Python脚本(基于idea)
前期准备 1.首先需要在本地环境中安装配置python环境 Python(含PyCharm及配置)下载安装以及简单使用(Idea) 博主本次使用python版本为py3.7.3 2.idea安装python插件 位置:File->Settings->Plugins->python->安装后重启即可 3.引入jython依赖 &l…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
