数据库缓存、索引、缓存命中率的理解

  1. 数据库:存储所有数据,一个系统的数据库分为多张表;
  2. 数据库表:数据库中的一张表,如果其中的表特别复杂,假设淘宝商品表特别复杂,如商品id、商品名称、价格(原价、折扣价、零售价、出厂价等)、描述、图片、视频、特点、时间(修改时间、创建时间等、优惠时间等)等等众多字段;
  3. 数据库索引:商品表查询起来特别复杂,那么可以将全量商品做个索引表,只抽取关键字段,这样即方便客户快速查询,又能减少磁盘IO;
  4. 数据库缓存:将一些常用的商品使用key-value值(如商品ID->商品JSON)存在redis中,这样客户拿到Key(如product_123),直接就把整个页面数据取出来了,连SQL解析和对象映射(ORM)的步骤都省了,但是由于缓存昂贵只能存使用量高的数据。有点类似索引(全量数据);
  5. 缓存命中率:缓存只存热点数据(热门商品),冷门数据直接查库但不进缓存,命中率是设计出来的(靠内存大小、淘汰策略、预热机制),不是配置出来的,靠的是策略和方法。
    • 扩大缓存内存:给Redis分配更大的内存,能存下更多不重复的商品数据,命中率自然上升;
    • 缓存预热(提前灌数据):比如双11前,运营把预计会卖爆的100万个商品提前塞进缓存,让系统一启动就有极高的命中率;
    • 缓存过期时间(TTL):如果设置永不过期,内存会炸;设置太短(如1秒),命中率极低;设置合理(如5-10分钟),既能抗住高并发,又能保证数据更新(如价格变动);
  6. 缓存和索引的区别:
    • 是否全量数据:索引是全量数据、缓存是热门数据(使用少的还会被淘汰),如果多次测试商品查询(查询1000个商品)是会影响缓存,根据机制是会把他放到缓存中的;
    • 与数据库数据是否一致:索引和数据库表一致,缓存是从数据库"复制",数据库更改后,缓存可能还没有更新,所以测试查询商品信息的响应时间,需要注意如果是热门ID的话可能是从缓存中获取而不是从数据库查询出来的,那么测试的是redis的性能;
    • 策略方面:索引村的就是全量数据,任何时候都是,缓存是会根据策略实时更新的,如淘汰机制;
  7. 索引更像图书馆的图书分类目录柜,而缓存更像前台借阅处的"热门书架",缓存命中率更像更新缓存的机制决定缓存中的热门书架;
    -----自己理解以及查询deepseek所得
相关推荐
2501_933670792 小时前
2026秋招数据分析岗备考路线:SQL、BI、项目与面试题拆解
数据库
我要见SA姐14 小时前
告别 Copilot?Codex 本地化部署指南
运维·数据库·机器学习·oracle·回归
xcLeigh5 小时前
聊聊国产化替换:好用数据迁移工具KDMS怎么帮咱们搞定评估难
数据库·sql·数据迁移·kes·kdms
Elastic 中国社区官方博客5 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
大数据·运维·数据库·elasticsearch·搜索引擎
我要见SA姐16 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
数据库·ide·vscode·oracle·编辑器
Nturmoils7 小时前
一份 KDMS 评估报告,怎样排出迁移先后顺序
数据库
这个DBA有点耶7 小时前
异构数据集成怎么做?5 种同步方案对比 + 金融级 CDC 实战解析
数据库·oracle·架构
独泪了无痕7 小时前
SQL函数实战:GREATEST与LEAST的技巧
数据库·sql·mysql
码少女8 小时前
Linux--多路转接之select
java·服务器·数据库
梁辰兴8 小时前
软件工程:软件维护的副作用
数据库·软件工程·梁辰兴·控制方法·软件维护的副作用·副作用类型·副作用原因