德国网站后缀,康保网站建设,苏州网站开发,厦门十大装修公司排名榜目录
引言
Redis 特性
内存中存储数据
可编程性
可扩展性
持久化
支持集群
高可用性
Redis 优势
Redis 用作数据库
Redis 相较于 MySQL 优势
Redis 相较于 MySQL 劣势
Redis 用作缓存
典型场景
Redis 存储 session 信息
Redis 用作消息队列
初心
消息队列的…目录
引言
Redis 特性
内存中存储数据
可编程性
可扩展性
持久化
支持集群
高可用性
Redis 优势
Redis 用作数据库
Redis 相较于 MySQL 优势
Redis 相较于 MySQL 劣势
Redis 用作缓存
典型场景
Redis 存储 session 信息
Redis 用作消息队列
初心
消息队列的优势
Redis 适用于消息队列的场景 引言 Redis 是一个在内存中存储数据的中间件用作为数据库用作为数据缓存在分布式系统中能够大展拳脚 Redis 特性 内存中存储数据 奠定了 Redis 在进行 访问 和 存储 时比较快 的基本特点 注意 相较于 单机程序 直接通过 变量 在 内存中存储数据Redis 可以实现在 分布式系统 中让 多个服务器共享同一份数据并且这些数据能够存储在内存中以提高访问速度 实例理解 进程之间具有隔离性每个进程都是被隔离开的进程 A 无法直接读进程 B 中的数据一个分布式系统往往会涉及到多个进程且这多个进程均分布在不同的主机当我们想访问其他进程中的变量时这是具有一定难度的而 Redis 则针对我们上述的需求进行了一个封装网络作为进程间的通信关键介质Redis 就是基于网络可以把自己内存中的变量给别的进程甚至别的主机的进程进行使用 可编程性 针对 Redis 的操作我们可以直接通过简单的交互式命令进行操作也可以通过一些脚本的方式 批量执行一些操作可以带有一些逻辑如 Redis 支持使用 Lua 编写脚本这些脚本可以在 Redis 服务器端执行通过脚本可以实现复杂的数据操作和逻辑比如批量操作、事务、原子性操作等 可扩展性 Redis 原有的功能基础上通过 C、C、Rust 这些语言编写 Redis 扩展Redis 自身已经提供很多数据结构和命令可通过扩展让 Redis 支持更多数据结构和命令 持久化 在内存中存储数据可能因为进程退出或系统重启导致数据的丢失但 Redis 以内存为主、硬盘为辅硬盘对数据进行备份Redis 重启则会重新加载硬盘中备份数据到内存上从而保证持久化 支持集群 Redis 提供了一种分布式架构允许将数据分布在多个节点上以实现数据的水平扩展和高可用性一个 Redis 能存储的数据空间是有限的引入多个主机部署多个 Redis 节点对数据进行分散存储扩大存储空间 高可用性 Redis 支持 主从结构从节点相当于主节点的备份当哪一个节点故障时Redis 集群可以自动进行故障转移将一个从节点提升为新的主节点以保持服务的可用性故障转移过程中集群会重新分配数据槽并重新配置主从关系 Redis 优势 Redis 在处理数据请求时具有 高效率 和 快速响应 的优势 分析原因 Redis 的数据存储在内存中相比于访问硬盘的数据库内存的读写速度要快得多Redis 的核心功能主要是操作内存的数据结构这些操作通常比较简单因此执行速度快Redis 使用了 IO 多路复用的方式如 epoll即使用一个线程管理多个 socket这样可以提高网络通信的效率Redis 使用的是单线程模型虽然更高版本的 Redis 引入了多线程这样的单线程模型减少了不必要的线程之间的竞争开销 注意 多线程提高效率的前提是 CPU 密集型的任务使用多个线程可以充分的利用 CPU多核资源但是 Redis 的核心任务主要就是操作内存的数据结构不会吃很多 CPU反而会因为加锁导致线程竞争导致性能的效率受到影响 Redis 用作数据库 MySQL 主要是通过 表 的方式来存储组织数据的关系型数据库Redis 主要通过 键值对 的方式来存储组织数据的非关系型数据库 Redis 相较于 MySQL 优势 Redis 在内存中存储其访问速度十分快相较于 MySQL 在硬盘中存储其访问速度要慢得多从而当在一些对性能要求很高的互联网产品中Redis 也被当作数据库进行使用 Redis 相较于 MySQL 劣势 Redis 与 MySQL 相比的最大劣势为存储空间相对有限如果应用对性能要求不高 且 需要存储大量的数据 时MySQL 应作为首要选择 注意 此处将 Redis 用作数据库存储的是 全量数据即这里的数据是不能随便丢弃的 Redis 用作缓存 典型场景 我们可以将 Redis 和 MySQL 结合起来使用从而达到存储空间又大且访问速度又快的需求 二八原则 即 20% 的热点数据能满足 80% 的访问需求利用该点将 Redis 用作缓存我们可以将热点数据放到 Redis 中进行存储以满足我们大部分的访问需求 问题 系统的复杂程度大大提高当数据发生修改还涉及到 Redis 和 MySQL 之间的数据同步问题 注意 此处 Redis 存的是部分数据全量数据都是以 MySQL 为主的 哪怕 Redis 的数据没了还可以从 MySQL 这边再加载回来 Redis 存储 session 信息 在 Web 应用程序中session 用于跟踪和存储用户的会话状态信息Redis 存储 session 信息属于 Redis 缓存 的经典应用场景 实例理解 分布式部署应用程序将 session 信息存储在应用程序的内存中 问题 当用户再次发起登录请求时负载均衡器如何将同一个用户的请求始终分配到同一个机器上 解决方案一 负载均衡器不再使用轮询操作而是通过 userId 来进行服务器的分配此时有三台应用服务器只需将 userId 对 3 进行求余操作每个余数对应一台应用服务器 解决方案二 将所有 session 会话都存储到 Redis 上让所有服务器从 Redis 中拿去相应的 session 信息由于将会话放到 Redis 中进行存储所以万一应用程序重启会话也不会丢失 Redis 用作消息队列 初心 Redis 最初就是用来作为一个“消息中间件”消息队列来使用的即 分布式系统下的生产者消费者模型网络版生产者消费者模型但很少会使用 Redis 来作为消息中间件因为业界有更多专业的消息中间件进行使用当前 Redis 主要还是被用作数据库和缓存 消息队列的优势 解耦发送者和接收者之间通过消息队列进行通信互不直接依赖或了解对方存在这种解耦使得系统组件能够独立地进行扩展削峰填谷消息队列能够平衡系统的负载当消息发送过快队列可以缓冲消息并按照接收者的处理能力进行消费从而防止系统过载 Redis 适用于消息队列的场景 Redis 由于其高性能和支持丰富的数据结构它也被广泛用于构建 轻量级 的消息队列系统如果当前场景中对于消息队列的功能依赖的不是很多并且又不想引入额外的依赖此时的 Redis 就可以作为一个选择 总结 相对于更高级功能和更复杂的消息处理逻辑需要用到专门的消息队列中间件如RabbitMQ、Apache Kafka 等这些中间件提供了更丰富的功能和更强大的扩展性适用于更复杂的消息处理场景