缓存中间件与数据库的相爱相杀

AI全栈开发实战:30天SaaS上线中的边界感与人机协作 在AI编程工具日益普及的今天,'用AI写代码'已从概念走向工程实践。本文聚焦于AI辅助全栈开发的核心逻辑——并非替代开发者,而是通过明确人机分工边界,将工程师角色升维至需求契约定义、安全合规审查与系统性集成决策层面。围绕Next.js、PostgreSQL、Vercel等AI友好型技术栈,深入解析类型驱动开发、参数化SQL生成、环境变量作用域、TS类型守卫等关键实践,揭示Copilot、Cursor、Claude三类工具在局部补全、跨文件分析与规范遵循上的能力错位与协同路径。适用于正评估AI落地价值的技术团 阅读详情

前言

最近马D梅因为年前太任性辞了职,碰巧遇到这次疫情,搞得心慌慌。最近四处投简历找工作,毕竟还是要吃饭的。

这不就接到一个公司的面试通知,即将开始一轮尴尬的面试。。。

面试官:为了减轻数据库的压力,通常采用的解决方案有哪些?

马D梅:缓存是最常用一种。包括浏览器缓存、Nginx反向代理缓存、JVM缓存、缓存中间件还有数据库缓存这几个方面。

面试官:就缓存中间件和数据库的问题,对于查询和更新的操作,你是怎么处理的?

马D梅:对于更新请求,先更新数据库再删除缓存;当查询请求过来查询不到缓存时,就会从数据库查询数据并放到缓存中。

面试官:那如果查询请求和更新请求发生并发时,如图1所示,所示步骤是有可能发生的,那如何避免情况?

马D梅:(慌了,我倒还没考虑过,不是编译通过就行了吗。。。)那就先删除缓再更新数据库。

面试官:(这小子乱打一通?)如图2所示,也还是存在问题。


先更新数据库,再删除缓存

在这里插入图片描述
如图1所示,当更新请求与查询请求发生并发情况时,会导致缓存与数据库的数据不一致。


先删除缓存,再更新数据库

在这里插入图片描述
如图2所示,当更新请求与查询请求发生并发情况时,会导致缓存与数据库的数据不一致。


解决方案

大前提:使用缓存就要容忍数据不一致。能保证最终一致性即可。

设置有效期

好处:缓存超过有效期被淘汰之后,程序会从数据库获取最新的数据重新放入缓存,保持一致性。

坏处:因为缓存失效,从而引发缓存击穿、缓存雪崩等问题。

加锁

不管是单机锁还是分布式锁,这种做法可以保证不同线程之间的操作不会出现不确定的结果,但是实际上在项目中并不会采用这种做法。本来使用缓存就是为了提高效率,现在因为缓存而加锁,只会得不偿失。

所有涉及缓存和数据库的操作都加上锁,极大地降低了处理并发的能力。

缓存中心

上面这些问题归结起来,就是修改缓存的入口太多。

那么为了解决这些问题,我们可以把缓存统一由一个模块来进行管理。
(示意图)
建立缓存中心之后,业务系统就不需要对缓存进行管理,由缓存中心统一对缓存进行维护。

代码示例:

/**
 * 建立缓存中心前
 */
public String findHotData() {
	// 查询缓存
    String result = redisTemplate.opsForValue().get(HOT_DATA_KEY);
    if (StringUtils.isNotBlank(result)) {
        return result;
    }
    // 缓存未命中则查询数据库
    result = dao.findHotData();
    if (StringUtils.isNoneBlank(result)) {
    	// 将查询的数据放入缓存
        redisTemplate.opsForValue().set(HOT_DATA_KEY, result);
    }
    return result;
}

/**
 * 建立缓存中心后
 */
public String findHotData() {
    return redisTemplate.opsForValue().get(HOT_DATA_KEY);
}

数据预热

(示意图)

对于一些热点的数据,我们可以通过缓存中心进行以下操作:

  • 应用系统或缓存中间件启动(重启)时,把数据加载到缓存中
  • 通过后台任务定时刷新缓存

监听日志,更新缓存

(示意图)
(工具:canal)

运维工程师技能图谱:从Linux内核到Kubernetes容器化实战 在数字化转型浪潮中,运维工程师的职责早已超越基础命令操作,转向保障大规模分布式系统的高可用与稳定性。理解操作系统进程调度、文件系统inode、TCP/IP协议栈等底层原理,是构建高效运维体系的基石;而容器化与Kubernetes的普及,则要求运维掌握声明式基础设施与自动化交付能力。从监控告警、日志分析到CI/CD流水线设计,现代运维更强调体系化思维和工程化实践。本文结合大厂运维笔试考点与生产环境真实案例,系统梳理从Linux性能排查、MySQL索引优化、Redis缓存一致性,到Docker镜像分层、K8s运 阅读详情

相关推荐

100kHz手持LCR表设计:高频阻抗测量与校准实战解析

阻抗测量是电子元件测试的基础,LCR表通过施加正弦激励并分析电压电流的幅值与相位,即可获取电容、电感、电阻的等效参数。在开关电源、无线充电等高频应用场景中,元件在100kHz下的ESR和阻抗特性尤为关键,传统10kHz手持仪表难以满足需求。本文从自动平衡桥原理出发,探讨如何将台式电桥的核心能力浓缩至手持设备,重点剖析高频寄生参数抑制、模拟链路设计、数字相敏检波算法及开路短路校准方法。通过实测数据验证,在100kHz频率下基本精度可达0.5%以内,为维修现场、产线抽检及硬件调试提供了可携带的精密测量方案。全文

weixin_33910191的博客 396

一文知数据库

什么是数据库​ 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。什么是数据库管理系统​ 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。数据库与数据库管理系统的关系1.2。

qq_68883928的博客 7321

个人信息保护合规审计人员(高级)能力考核试卷+面试模拟

《个人信息保护合规审计考试与面试指南》 摘要:本文提供个人信息保护合规审计考试及面试的全面指导。考试采用闭卷笔试形式,满分100分,合格线75分,时长120分钟,包含单选、多选、判断题及综合案例分析题。内容涵盖《个人信息保护法》核心条款、审计程序、风险评估等实务要点。面试环节采用情景模拟方式,重点考察应试者在压力下处理审计独立性、客户关系与监管要求的平衡能力,以及应对数据泄露等突发事件的处置流程。案例题聚焦大型互联网平台的数据收集、共享、跨境传输等高风险环节的合规审计,要求设计完整的审计方案框架。面试评分标

qq_41525079的博客 1142

数据库基本概念:数据库的定义、特点、分类、组成、作用

数据库(database)是用来组织、存储和管理数据的仓库。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库)。用户可以对数据库中的数据进行新增、查询、更新、删除等操作。我们可以看到在MyISAM中数据和索引是分开。而在InnoDB中的数据和索引是在一个文件中的,

m0_70208894的博客 5万+

Unity Shader Graph 2D - Procedural程序化图形转动的环状六边形

Hexagon又称六边形,在游戏中是十分常见的基础形状,本文将使用程序化的六边形来制作多个环状六边形叠加的转动动画效果,实践Unity Shader Graph中的常用节点功能。

Giver的博客 1928

从按键开机到I2C隔离:手把手拆解一个智能硬件项目里的MOS管实战配置

本文详细解析了智能硬件项目中MOS管的实战配置,从按键开机电路到I2C总线隔离,全面覆盖电源管理和信号隔离的关键技术。通过PMOS+NMOS组合方案实现可靠的开机功能,并采用双NMOS方案优化I2C通信隔离,提升系统稳定性和信号质量。

weixin_28691741的博客 326

全网最详细的数据库基础指南

数据库是存储和管理结构化数据的系统,核心包括关系模型、SQL语言和事务管理三大支柱。关系数据库通过二维表组织数据,使用主外键建立关联。SQL提供数据定义(DDL)、操作(DML)和控制(DCL)功能,支持复杂查询与数据处理。数据库设计需遵循规范化理论,减少冗余并确保数据完整性。事务管理保障ACID特性,通过锁机制和隔离级别解决并发问题。现代数据库技术已从传统关系型扩展到NoSQL、分布式和云数据库等新型架构,满足大数据时代多样化需求。掌握这些基础知识是数据库开发和优化的关键。

wll0417yj的博客 1万+

Python 爬虫高级实战:HTTPS 证书忽略与代理抓包配置

本文深入解析了HTTPS加密与SSL证书校验机制在爬虫开发中的核心问题及解决方案。文章首先剖析了HTTPS协议架构和证书校验流程,指出爬虫开发中常见的证书异常场景及其负面影响。随后详细介绍了Python主流请求库(requests、httpx、aiohttp)的证书忽略配置方法,包括同步/异步模式下的实现方案。针对代理环境,文章系统比较了HTTP、HTTPS、SOCKS5等代理类型的特性差异,并提供了完整的代理配置示例。特别对中间人抓包场景,阐述了Mitmproxy的工作原理和配置要点。最后提出了工程级爬虫

2503_91057718的博客 85

一文读懂数据库、数据仓库、数据平台、数据中台、数据湖

数据库是用于存储、管理、维护和检索数据的系统。是所有软件应用、网站、企业信息系统和数据驱动决策的基础。简单来说就是:数据库就是一个存储信息(水)的容器。数据库使用场景-图1数据库主要分为两种类型:关系型数据库和非关系型(NoSQL)数据库。非关系型又分为四种类型:键值型、列存储型、文件型和图形数据库(这块后面有时间详细说下)。数据库类型-图2题外话:某些数据库(如 MongoDB)可以分为多个类别,因为它们支持不同的数据模型。此外,所提供的列表并不详尽,因为每个类别中还有许多其他数据库可用。

m0_59235945的博客 6412

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

算法如诗的博客 5584

电路设计仿真软件:Mentor Graphics_(11).MentorGraphics软件操作与技巧

/ 定义自定义仿真命令// 加载设计文件// 运行仿真// 主函数return 1;return 0;// 自定义设计检查// 获取设计中的所有模块// 遍历所有模块// 检查模块名称是否符合规范if (!// 检查模块中的所有引脚if (!// 主函数main() {通过本节的学习,您应该已经掌握了如何在 Mentor Graphics 中进行二次开发,包括使用 Tcl、C++ 和 Python 进行基本和高级操作。

kkchenjj的博客 1637

数据库是什么?为什么要使用它?

本章将会介绍数据库是什么?为什么要使用数据库以及数据库的分类

m0_73995538的博客 8399

码农新宠大对决:GitHub Copilot、通义灵码和CodeLlama谁主沉浮?

本文对三款主流AI编程工具GitHub Copilot、通义灵码和CodeLlama进行了全面对比分析。GitHub Copilot在多语言支持和代码质量上表现突出;通义灵码在中文理解和阿里云生态集成方面优势明显;CodeLlama则以开源可定制见长。文章从代码生成、理解能力、多语言支持、使用体验等维度展开评测,并结合实际案例说明不同开发者群体的适用选择。建议新手可优先考虑通义灵码,经验开发者适合GitHub Copilot,而有定制需求的企业团队则可选择CodeLlama。随着AI技术发展,这些工具将持续

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 675

被绕晕的Cookie/Session/Token?一篇文章讲透它们的相爱相杀!

各位码农小伙伴们(特别是刚入行的萌新),是不是经常被这三个概念绕得云里雾里?每次面试被问到它们的区别,是不是就像被问到"先有鸡还是先有蛋"一样懵圈?别慌!今天咱们就来扒一扒这三个Web开发界的"顶流"到底有什么恩怨情仇!(文末有超实用对比表格,看到最后绝对赚到)这三兄弟就像不同的工具,关键要看使用场景。最近帮朋友排查一个"SyntaxError: unexpected token"错误,结果发现竟然是前端没正确处理JWT的Bearer前缀!(所以基础真的很重要啊)技术选型就像谈恋爱,合适的才是最好的!

syntaxsage的博客 825

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MySQL面试必杀技:这些高频考点让你秒变数据库大神!!!

记住:面试不是背答案,而是展现解决问题的思维。把这些知识点内化成自己的理解,遇到变形题也能见招拆招。最后送大家一句话:索引建得好,下班回家早;事务用得溜,bug绕道走!正确答案:其实COUNT(*)经过优化器处理,和COUNT(1)没区别!MyISAM有元数据缓存所以快,但带WHERE条件就现原形!”——这题简直是面试官的最爱!“如果让你设计一个数据库,你会考虑哪些方面?防止幻读就靠它,但也是死锁的罪魁祸首!你以为背出原子性、一致性就完了?血泪教训:三范式不是银弹!能走a、ab、abc就完了?

indiazone的博客 710

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

高阶后端面经:架构决策、分布式与项目深挖的实战方法论

后端技术面试是检验工程师综合能力的关键环节,其本质并非知识点的机械记忆,而是面对复杂业务场景时的架构决策与工程取舍。在分布式系统、高并发场景下,缓存一致性、幂等性、分布式事务等核心问题的处理方式,直接反映候选人从“知道是什么”到“决策怎么做”的层次跃迁。真正的高阶能力,体现在技术选型与业务指标挂钩、故障排查思路清晰、项目讲述数据化,以及系统设计题中的容量估算与边界思考。通过解析面试官评估维度、高频场景题解题范式、项目陈述黄金框架等实战经验,文章为冲击高级岗位的后端工程师提供一套可落地的备战方法论,助力在激烈

weixin_34008933的博客 454

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

从CRUD到系统架构师:构建技术内功的四大心法与实战路径

在软件开发领域,深入理解计算机系统原理是构建高性能、高可靠系统的基石。从进程线程调度、内存管理到I/O模型与网络协议栈,这些底层知识构成了复杂分布式系统的支撑框架。掌握这些原理不仅能帮助开发者快速定位线上问题的根本原因,更能从架构层面设计出优雅的解决方案。在微服务和云原生架构日益普及的当下,对JVM运行时机制、TCP拥塞控制等核心概念的深刻理解,成为应对高并发场景、保障系统稳定性的关键技术能力。本文通过系统化的思维模型构建、可调试的实践方法,结合具体案例,展示了如何将理论知识转化为解决实际工程问题的直觉,特

weixin_34416649的博客 334

db2删除大量数据_SQL 基础知识- 数据库与 SQL

目录What's 数据库数据库结构SQL 概要创建数据库与表删除和更新表一、What's 数据库  1.数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。如:大型-银行存储的信息,小型-电话簿。  2.数据库管理系统(Batabase Management System,DBMS):用来管理数据库的计算机系统。  3.关系型数据库(Relatio...

weixin_39809793的博客 1355

数据库基础

- 数据库(database)是用来`组织、存储和管理`数据的`仓库`(文件)。

李宥的博客 1万+

数据库基础以及基本建库建表的简单操作

数据库的本质是一个结构化数据的集合及其管理系统,其核心不仅仅是存储数据,而是通过一套软件系统(数据库管理系统,DBMS)实现数据的高效访问,安全控制,逻辑关系维护及复杂操作支持。即使数据最终存储在磁盘上,直接使用文件存储与通过数据库管理存在根本性差异。

L326214的博客 3608

数据库及SQL----常用知识点总结

用递归和非递归两种方法翻转一个链表

读书与思考的乐趣 4万+

数据库(基础篇)

第一种、Mysql自带的客户端连接。第二种、使用命令:mysql -uroot -proot (-u:用户名)(-p: 密码)第三种: 使用客户端软件 navicat 和sqlyog等-- DDL数据定义语言----- 1. 创建数据库 语法: create database 数据库名;-- 2. 删除数据库 语法: drop database 数据库名-- 3. 切换到指定的数据库。use 数据库名use qy174;

weixin_51644244的博客 3785

数据库概述

DDL语句用于定义和管理数据库结构。常用的DDL语句包括CREATEDROP和ALTER。创建新的数据库CREATE DATABASE 数据库名;选择数据库USE 数据库名;创建新的表CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,...,PRIMARY KEY (主键名)示例NOT NULL: 不允许为空值。DEFAULT: 默认值。: 主键字段,确保唯一且不为空。显示表结构DESC 表名;删除指定的数据表DROP TABLE 表名;

Jin_0612_的博客 4462

数据库基础知识点大全

一、数据库概述 1.1 什么是数据库 **数据库:**英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。 **顾名思义:**就是存储数据的仓库,实际上就是一堆文件,这些文件中存储了具有特定格式的数据。 1.2 什么是数据库管理系统 **数据库管理系统:**DataBaseManage,简称DBMS。 数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。 1.2.1 常见的数据库管理系统 MySQL、Oracle、MS SqlServer、D

qq_48430744的博客 6471

数据库梳理

(Database)是按照数据结构来组织、存储和管理数据的仓库。在计算机系统中,数据库是指以某种有组织的方式存储的数据集合。为了访问这些数据,通常需要使用数据库管理系统(DBMS, Database Management System),它是一组软件工具,允许用户与数据库进行交互:定义数据结构、存储数据、检索数据以及管理其他方面的数据库操作。

2403_88540345的博客 1791
上一篇: 【Spring】Bean生命周期以及应用场景(注解版)
下一篇: 由RestTemplate引发的加班惨案
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值