Redis 是一种快速、开源、内存中的键值数据结构存储。
REDIS 允许您在 RAM 上存储键值对,由于访问 RAM 比访问磁盘快 150,000 倍,比访问 SSD 快 500 倍,这意味着速度。
但是,我们已经在大部分操作中使用 RAM!
但是当涉及缓存或数据库交互时,我们默认使用磁盘,想象一下访问数据库以读取 10,000 条记录,如果数据存储在磁盘上,平均需要 30 秒,而从 RAM 读取大约需要 0.0002 秒。
这意味着它是一个超快的读/写系统,但由于它存储在 RAM 中,因此它是易失性的。
那么,我们会丢失数据吗?
为了防止发生数据丢失,有一个内置的持久性模块,它会在给定的情况下将内存状态写入磁盘上的转储文件,转储文件在系统启动时加载,一旦启动并运行,数据就可用于操作,所以,没有数据丢失。
我们可以在多个实例中使用不同的配置,以允许我们通过所谓的哨兵和主从架构保持持续的正常运行时间。
Redis 是Remote Dictionary Server的首字母缩写词。
换句话说,它是一种工具,可让您在 RAM 上存储数据库。
由于 Redis 速度快如闪电,因此主要用于缓存目的,它是 Redis 最闪耀的地方,因为它提供了可以通过字典结构存储的各种类型。
我们可以使用 Redis 缓存具有高流量和静态内容的完整页面,如果页面本身容易发生变化或者内容是动态生成的,那么无论如何都不应该缓存它,无论我们使用的是 Redis 还是 Memcached。如果页面主要包含静态内容或者每 x 时间刷新一次内容,那么我们可以缓存该页面并立即提供它!
在何处使用 Redis 的第一要务是整页缓存(FPC)。
它可以用来做的另一件事是存储会话,与没有任何持久性的 Memcached 不同,Redis 有它并且允许会话存储,使用 Redis 处理会话可在与站点交互时提升用户体验。
持久性对于存储会话很重要,以避免在用户交互的关键部分丢失数据,例如,处理付款、将商品添加到购物车或作为经过身份验证的用户请求任何操作。
第二个是会话缓存。
Redis 作为一个进程运行,与 MySQL、PHP、Apache 和所有其他服务的运行方式相同,它使用大量 RAM 内存,如果服务器需要更多空间来进行繁重的提升,那么它可能会选择杀死 Redis 的进程,在这种情况下,我们会遇到服务停机并可能丢失数据,为了防止这种情况发生,Redis 内置了 Master-Slave 架构。
这种架构允许我们有额外的进程来监控我们的主要进程,从进程模仿它的命令,偶尔会复制主转储文件,以保持进程之间的一致性。这些监控进程被称为 Slaves,而主要的是 Master。
当主进程被杀死时,其中一个从属进程成为主进程并在主进程重新启动时处理所有请求,一旦 Master 再次启动,它会从 Temporary Master 获取转储文件并将其用作基础,主进程重新实例化为主进程,而临时主进程再次变回从进程。
但是我们怎么知道主进程什么时候宕机了呢?我们怎么知道哪个 Slave 应该成为 master?
Sentinel 是具有检查 Redis 实例是否正常工作的特定职责的进程,他们负责:
哨兵,我猜这个名字说明了一切。
一般设置通常使用一个 Master、两个 Slave 和三个 Sentinel。
Redis 有一个很好的社区和写得很好的文档,如果你想尝试一下,你会在他们的官方网站上找到很多支持。
https://redis.io/