缓存设计的创新之旅:架构的灵魂之一
缓存在架构设计中占有重要地位。缓存在提升性能中也扮演重要的角色。常见的有对资源的缓存,比如数据库连接池、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…...
前端 JS 经典:i,i++,++i区别
1. 概念 用于对变量进行自增操作。它们的区别在于返回值不同。 i 表示先使用 i 的值,再将 i 加 1,返回的是 i 自增前的值。 i 表示先将 i 加 1,再使用 i 的值,返回的是 i 自增后的值。 i 表示直接使用 i 的值,不进…...
EF Core 7.0 新特性之批量修改
概要 EF Core 7.0 提供了一个可以将LINQ查询和批量修改相结合的方法ExecuteUpdate。由于数据修改是以批量更新的方式完成,所以可以减少数据库的往返次数。 本文将主要介绍ExecuteUpdate的使用方法。 代码和实现 基本案例 本文我们使用银行分行,ATM机…...
Vue_Bug error0308010Cdigital envelope routinesunsupported
Bug描述: error0308010Cdigital envelope routinesunsupported 解决方法: Just add this to the top of vue.config.js : const crypto require(crypto);/*** md4 algorithm is not available anymore in NodeJS 17 (because of lib SSL 3).* In that…...
中科院提出“思维传播”,极大增强ChatGPT等模型复杂推理能力
中国科学院自动化研究所与耶鲁大学计算机系研究人员联合发布了,一份名为《思维传播:用大型语言模型进行基于类比的复杂推理》的论文。 ChatGPT等大型语言模型展示出了超强的创造能力,只需简单的文本提示就能生成小说、营销创意、简历等各种文本内容。但…...
ubuntu20.04安装opencv 3.2.0 报错
安装记录 Error 1: cmake时报错 CMake Error at cmake/OpenCVCompilerOptions.cmake:21 (else): A duplicate ELSE command was found inside an IF block. Fix: 修改opencv-3.2.0/cmake/OpenCVCompilerOptions.cmake文件 注释掉21和22行 else()message(STATUS "Unabl…...
KubeVela交付
有什么用我也不想说了,这个是k8s CI/CD,进阶玩家玩的了,比你们喜欢Arg CD更科学,更现代 在 Kubernetes 中安装 KubeVela helm repo add kubevela https://charts.kubevela.net/core helm repo update helm install --create-namespace -n v…...
【SpringCloud-10】SCA-nacos
前言: 前面介绍的springcloud,可以看做第一代,称为:SCN(spring cloud Netflix); 接下来介绍的是第二代:SCA(spring cloud alibaba); SCA主要有以下组件&#…...
卡顿分析与布局优化
卡顿分析与布局优化 大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。Android系统每隔大概16.6ms发出VSYNC信 号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fp…...
【Vivado HLS Bug】Ubuntu环境下Vivado HLS导出IP报错:HLS ERROR: [IMPL 213-28]
Export IP Invalid Argument / Revision Number Overflow Issue (Y2K22) (xilinx.com)一.问题描述: 在Ubuntu20.04环境中使用Vivado HLS导出IP时报错:HLS ERROR: [IMPL 213-28] 二.解决方法: 1.从如下链接中下载官方补丁Export IP Invalid…...
2022最新版-李宏毅机器学习深度学习课程-P14 批次(batch)与动量(momentum)
一、batch 回顾epoch、shuffle batch size大还是小?都有好处 大batchsize的好处 由于GPU有并行计算的能力,左边并不一定用时更长 反而是,batch size小的时候,要跑完一个epoch所用的update时间更长,所以时间方面的比较…...
什么是网络营销产品组合策略/seo sem优化
iostat iostat 命令详细地显示了存储子系统方面的情况。你通常用iostat来监控存储子系统总体上运行状况如何,并且在用户注意到服务器运行缓慢之前提早发现输入/输出缓慢的问题。相信我,你应该在用户发现这些问题之前先发现这些问题! meminfo和…...
网站建设云南/市场营销策略
我们自己要意识到,不要把谈话当成义务,而内心抗拒,需要以成年人的姿态对待父母。要有技巧地和父母沟通,主动找话题是一个不错的方法。比如教父母用微信、支付宝。分享别人的事情。分享别人的事情时能让人产生强烈的好奇。多表达父…...
网站名称注册/网站代理公司
前言 RHEL7使用了XFS文件系统,而非原来的Ext(Extended file system)。 文件系统 文件系统:是OS用作于明确存储设备(磁盘,固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。OS中负责管理和存储文件信息的软…...
简洁的网站案例/深圳营销策划公司十强
丹阳新闻网报道 丹阳交警告诉您:目前,市区部分路段已安装了高清电子抓拍系统,正式试点抓拍驾驶机动车斑马线前不礼让行人的交通违法行为!从今年3月份开始,丹阳交警大队在市区185条主次干道斑马线前漆划了“礼让行人”…...
安康网站建设电话/微信指数官网
我不能告诉你如何确定应该阅读lang_perl或lang_ruby 。 但是看一下autocommand文档会给gzip文件带来一个例子( :he gzip-example ):augroup gzipautocmd!autocmd BufReadPre,FileReadPre *.gz set binautocmd BufReadPost,FileReadPost *.gz [,]!gunzipautocmd BufR…...
word里面网站超链接怎么做/百度推广哪家做的最好
不少人买平板电脑的目的就是用来玩吃鸡的,然而有的人发现买回来后玩吃鸡会有一点点卡,这是什么原因呢?主要与配置和设置有关系,因为吃鸡对配置要求还是比较高的,如果选择一些配置较差的低端品牌自然会卡顿,那么它对于…...