目录
1. 什么是 Redis
1.1 Redis 内存数据存储
1.2 Redis 用作数据库
1.3 Redis 用作缓存 (cache)
1.4 用作消息中间件
1. 什么是 Redis
The open source , in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.
开源的内存数据存储,被数百万开发人员用作数据库、缓存、流引擎和消息中间件。
从官网得到这句话来看, Redis 它最核心的作用就是用来在内存中存储数据.
1.1 Redis 内存数据存储
【思考】这时候我们就会想, 定义变量不就是在内存中存储数据嘛, 为啥需要 redis 来存 ??
如果只是单机程序的话, 直接通过变量来存储数据的方式, 确实是更优的选择. 而 Redis 是在分布式系统中, 才能发挥出它的威力的. 而如果在分布式系统中使用变量在内存中存储数据, 那是玩不转的, 因为定义变量是在当前服务器进程的内部去存储的, 而进程之间有个东西叫 "隔离性", 也就是说进程 A 它没法直接读取进程 B 内存中的数据. 在这样的一个前提之下, 如果是一个分布式系统, 势必会涉及到多个进程, 甚至这多个进程是在不同的主机上, 那么此时, 你想直接访问其他进程内存里面的变量, 这件事情就变得困难起来了.
而 Redis 就是针对上述这样一个需求点做了一个封装, 既然我们没法直接突破进程之间进行访问, 那我们应该怎么办呢 ?
【进程间通信】
我们之前在学进程的时候, 进程里有个东西叫做进程间通信, 而进程间通信最主流的方法就是基于网络来实现, 它既可以让同一个主机之间的多个进程间通信, 它还可以跨主机, 跨不同的主机实现进程间通信.
而 Redis 就是基于网络, 把自己内存中的变量分享给别的进程, 甚至别的主机的进程来进行使用, 而这就是 Redis 最核心的部分.
1.2 Redis 用作数据库
谈到数据库, 我们就会自然而然的联想到 MySQL, MySQL 是目前主流的数据库之一, 它也可以在一个分布式系统中帮我们存储数据, 并且也能管理好数据; 但是MySQL它最大的问题在于, 访问速度 "比较慢"!! 有句话说的好 : "天下武功唯快不破", 尤其是现在很多互联网产品中, 对于性能要求是很高的.
所以相比于 MySQL 来说, Redis 也可以作为数据库来使用, 它和 MySQL 相比, Redis的优点就是"快"!! 而且是快上万倍, MySQL 的数据是在硬盘中存储, 而 Redis 的数据是在内存中存储. (可以参照下表)
谷歌公司给出的各层级硬件执行速度 :
上表是从定性的角度可以知道 Redis 比 MySQL 快很多, 具体快多少, 是很难定量衡量的. 因为 MySQL 和 Redis 支持的功能上差异很大, 如果要定量衡量, 得在相同功能, 相同应用场景中, 进行控制变量法才可以衡量.
那既然 Redis 那么快, 为啥还要使用 MySQL 呢 ??
Redis 和 MySQL 相比,, 最大的劣势就是 "小" !! 存储空间有限. 虽然有不少的互互联网产品对于性能的要求比较高, 但是大部分的互联网产品对于性能的要求还是没那么高的.
如果性能没那么高, 同时我们又希望存储更多的数据, 用更低的成本来存, 那么相较于 Redis, MySQL 必然是首选, 而且 MySQL 相较于 Redis 提供了更多的功能, 提供了更加丰富的增删改查能力.
所以在 "功能" 上和 "存储空间" 上来说, MySQL 还是更胜一筹的!!
1.3 Redis 用作缓存 (cache)
【思考】既然 MySQL 它大但是速度慢, Redis 小但速度快, 那有没有一种方式, 可以做到又大又快呢??
典型的方案就是把 Redis 和 MySQL 结合起来使用, 也就是把 Redis 作为 MySQL 的 cache, 让热点数据存储在 Redis 中, 让全量数据存储在 MySQL 中, 也就是我们平时所说的 "二八原则" : 20% 的热点数据能够满足 80% 的访问需求.
这样做确实可以实现, 但是有得必有失, 这样玩带来的代价就是 :
- 系统的复杂程度大大提升了
- 如果数据发生修改, 还涉及到 Redis 和 MySQL 之间的数据同步问题
1.4 用作消息中间件
Redis 的初心就是用来作为一个 "消息中间件(消息队列)", 主要是为了实现分布式系统下的生产者消费者模型.
虽然 Redis 最初是想用来作为消息中间件来使用, 但是呢, 它偏偏有心栽花花不放, 无心插柳柳成荫. 随着 Redis 的发展, 他们突然发现把这个 Redis 作为一个数据库, 或者作为一个缓存好像更香, 而拿 Redis 作为一个消息中间件这件事反而非常少, 而且业界又演化出了更多更专用的一些消息中间件, 所以 Redis 它很少会被作为一个消息中间件来使用.
【总结】
对 Redis 有了简单的了解后, 谈到 Redis, 三句话离不开一个词 - "分布式", 如果抛开分布式式系统, 那么 Redis 是没有太大的优势的, 所以要想能够更好的理解 Redis, 就得去了解一下分布式系统了, 下一篇博客来简单聊聊分布式系统.