Cache Aside Pattern(缓存模式)
本文主要讨论这么几个问题:
(1)“缓存与数据库”需求缘起
(2)“淘汰缓存”还是“更新缓存”
(3)缓存和数据库的操作时序
一、需求缘起
场景介绍
缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。例如对于用户的余额信息表account(uid, money),业务上的需求是:
(1)查询用户的余额,SELECT money FROM account WHERE uid=XXX,占99%的请求
(2)更改用户余额,UPDATE account SET money=XXX WHERE uid=XXX,占1%的请求
由于大部分的请求是查询,我们在缓存中建立uid到money的键值对,能够极大降低数据库的压力。
读操作流程
有了数据库和缓存两个地方存放数据之后(uid->money),每当需要读取相关数据时(money),操作流程一般是这样的:
(1)读取缓存中是否有相关数据,uid->money
(2)如果缓存中有相关数据money,则返回【这就是所谓的数据命中“hit”】
(3)如果缓存中没有相关数据money,则从数据库读取相关数据money【这就是所谓的数据未命中“miss”】,放入缓存中uid->money,再返回
缓存的命中率 = 命中缓存请求个数
Cache Aside Pattern(缓存模式)相关推荐
- 缓存模式(Cache Aside、Read Through、Write Through、Write Behind)
概览 缓存是一个有着更快的查询速度的存储技术,这里的更快是指比起从初始的数据源查询(比如数据库,以下都称作数据库)而言.我们经常会把频繁请求的或是耗时计算的数据缓存起来,在程序收到请求这些数据的时候可 ...
- 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache...
开篇介绍 先简单的演示一下使用 Lookup 组件实现一个简单示例 - 从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持 ...
- 缓存读写策略 Cache Aside Pattern,开发必备
我们在前面讲到了当我们业务面临大量写并发的时候,将数据库开发成分布式存储系统,然后又介绍了NoSql数据库与关系型数据库互相配合,以用来更好的服务与我们的业务发展.但随着并发的持续增加,存储数据量的增 ...
- 如果不知道这4种缓存模式,敢说懂缓存吗?
概述 在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过. 如果使用得当,缓存可以减少响应时间.减少数据库负载以及节省成本.但如果缓存使用不 ...
- 4种常见的缓存模式,你都知道吗?
概述 在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过. 如果使用得当,缓存可以减少响应时间.减少数据库负载以及节省成本.但如果缓存使用不 ...
- 缓存更新的Design Pattern -- 缓存专题(2)
黄粱一梦终须醒, 无根无极本归尘. 金龙飞天归何处, 不如凡间做真人! 上个周忙活了一周上线工作,因为银行的行业性质,与国家安全.国家政策强相关.所以对上线版本的质量要求都很高,因而每一次上线前担惊害 ...
- 应用多级缓存模式支撑海量读服务
缓存技术是一个老生常谈的问题,但是它也是解决性能问题的利器,一把瑞士军刀:而且在各种面试过程中或多或少会被问及一些缓存相关的问题,如缓存算法.热点数据与更新缓存.更新缓存与原子性.缓存崩溃与快速恢复等 ...
- SQLite剖析之异步IO模式、共享缓存模式和解锁通知
1.异步I/O模式 通常,当SQLite写一个数据库文件时,会等待,直到写操作完成,然后控制返回到调用程序.相比于CPU操作,写文件系统是非常耗时的,这是一个性能瓶颈.异步I/O后端是SQLi ...
- cache tier 分级缓存
一图描述 cache tier: Ceph 缓存层将冷热数据分离,以快速存储设备作为缓存层,低速廉价存储设备作为存储层 提升 IO 性能 使用两个 pool,作为存储层和缓存层,缓存层覆盖在存储层上, ...
- Firefox火狐浏览器web开发调试开启强制刷新缓存模式
Firefox火狐浏览器web开发调试开启强制刷新缓存模式 最近做项目的时候,在火狐浏览器发现缓存难清理,用Ctrl+F5 Ctrl+R 等在谷歌和IE浏览器的快捷键没用,搜索了一下,发现火狐清理缓存 ...
最新文章
- 找论文太难?试试这款「文本生成」论文搜索工具
- 我们遇到困难怎么办?
- PHP的empty isset is_null
- 常用音频软件:Wavesufer
- python嵌套列表字典_python中嵌套列表转为字典
- sql 两个 in_SQL基础知识——IN运算符
- java c s聊天程序_Java建立C/S 模式聊天室服务器和客户端
- php 网站api,php – 如何调节网站的API用户?
- (65)-- 爬取兄弟连老师信息
- 中国无线充电行业发展规模与投资可行性咨询报告2022-2027年版
- 民航订票管理系统设计
- OpenG绘图方式比较
- 最简单明了的QT服务器搭建
- Python为何能上位碾压Java?
- 如何获取sha1值和MD5值
- 如何释放磁盘空间在您的Mac
- Linux常用命令——newusers命令
- 《深入理解大数据:大数据处理与编程实践》一一1.2 大数据处理技术简介
- 计算机主机突然断电有什么影响,台式机突然断电有什么危害
- 记一次阿里云ECS服务器centos6.5无法使用epel源的爬坑
热门文章
- List元素互换,List元素转换下标,Java Collections.swap()方法实例解析
- 2022-2028年中国涤纶市场投资分析及前景预测报告
- 2021年中国服装行业分析报告-产业规模现状与发展规划趋势
- 《将要淘汰的八种人》读后感
- LeetCode简单题之增量元素之间的最大差值
- LeetCode简单题之重新分配字符使所有字符串都相等
- 全文翻译(三) TVM An Automated End-to-End Optimizing Compiler
- 编写可调模板并使用自动调谐器
- nvJPEG Codec库
- 2021年大数据ELK(二十三):Kibana简介