主 题
为什么要用缓存
高性能
假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 mysql,半天查
出来一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以
不用立即反馈给用户。那么此时咋办?
缓存啊,折腾 600ms 查出来的结果,扔缓存里,一个 key 对应一个 value,下次再有人查,别
走 mysql 折腾 600ms 了,直接从缓存里,通过一个 key 查出来一个 value,2ms 搞定。性能提
升 300 倍。
就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请
求,那么直接将查询出来的结果放在缓存中,后面直接读缓存就好。
高并发
mysql 这么重的数据库,压根儿设计不是让你玩儿高并发的,虽然也可以玩儿,但是天然支持
不好。mysql 单机支撑到 2000QPS 也开始容易报警了。
所以要是你有个系统,高峰期一秒钟过来的请求有 1万,那一个 mysql 单机绝对会死掉。你这
个时候就只能上缓存,把很多数据放缓存,别放 mysql。缓存功能简单,说白了就是 keyvalue 式操作,单机支撑的并发量轻松一秒几万十几万,支撑高并发 so easy。单机承载并发
量是 mysql 单机的几十倍。
缓存是走内存的,内存天然就支撑高并发。
Redis
redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像
memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬
盘上进行保存。
优点
- 速度快,因为是纯内存操作每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB
- 类型丰富,支持string,list,set,sorted set,hash,此外单个 value 的最大限制是 1GB,不像 memcached 只能保存 1MB 的数据
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- Redis 也可以对存入的 Key-Value 设置 expire 时间,因此也可以被当作一 个功能加强版的memcached 来用
缺点
- 缺点是数据库容量受到物理内存的限制,虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。不能用作海量数据的高性能读写
全部评论(0)