本文最后更新于2024-10-07,距今已有 614 天,若文章内容或图片链接失效,请留言反馈。
3_【Redis】Redis 特性介绍
「前言」文章的大致内容是对 Redis 的特性进行介绍和应用场景。
一、特性
ln-memory data structures -- Redis 在内存中的存储数据。
- Well-known as a "data structure server", with support for strings, hashes, lists,sets, sorted sets,streams, and more.
- Redis 主要通过键值对的方式来组织存储数据。Redis 是一种非关系型数据库。
- Redis 支持的数据结构有 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)等。
- Redis 的键都是 string,value 则是上述的任意一种。
- MySQL 主要是通过表的方式来组织存储数据,MySQL 则是一种关系型数据库。
Programmability -- Redis 的可编程性。
- Server-side scripting with Lua and server-side stored procedures with Redis Functions.
- 针对 Redis 的操作可以通过一些简单的交互式命令进行操作,也可以通过脚本的方式,批量执行一些操作,比如使用 Lua 脚本语言。
Extensibility -- Redis 的可扩展性。
- A module APl for building custom extensions to Redis in C, C++, and Rust.
- Redis 可以在原有的基础上进行扩展(本质是动态链接库),可以使用C,C++ 或者 Rust 语言进行编写扩展,让 Redis 支持更多命令或者数据结构。
Persistence -- Redis 的持久性。
- Keeps the dataset in memory for fast access, but can also persist all writes to permanent storage to survive reboots and system failures.
- Redis 的数据是存储在内存中的,内存中的数据有一个特性——易失性,进程退出或者系统重启内存中的数据就丢失了。
- 而 Redis 会把数据存储在硬盘上,即内存为主,硬盘为辅(相当于备份数据)。
- 如果 Redis 重启了,在重启时就会加载硬盘中的备份数据,使 Redis 的内存恢复到重启前的状态。
Clustering -- Redis 支持集群(非常关键)。
- Horizontal scalability with hash-based sharding, scaling to millions of nodes with automatic re-partitioning when growing the cluster.
- Horizontal scalability,水平扩展,类似于分库分表。
- 一台服务器上的 Redis 能够存储的数据是有限的,物理内存空间有限。这时就可以引入更多的主机,部署多个 Redis 节点,让每个 Redis 节点存储一部分数据。
High availability -- Redis 的高可用性
- Replication with automatic failover for both standalone and clustered deployments.
- 高可用的核心是备份。
- Redis 是支持主从结构的,从节点就相当于主节点的备份。一旦主节点挂了,从节点就会代替主节点进行工作。
Redis 最核心的特点就是快!
- Redis 的数据存储在内存中,比需要访问硬盘的数据库快得多。
- Redis 核心功能都是比较简单的逻辑,直接在内存中操作数据结构。
- 从网络的角度,Redis 使用了 IO 多路复用(epoll)。
- Redis 使用的是但线程模型(高版本引入了多线程,网络方面),这样的单线程模型,减少了线程之间不必要的竞争开销。注意:多线程高效的前提是:CPU 密集性任务,使用多个线程可以充分利用 CPU 多核资源。对于 Redis 来说,主要任务就是在内存中操作数据结构,不会吃很多的 CPU,引入多线程反而可能会导致性能下降,比如线程竞争,锁竞争等。
二、应用场景
Real-time data store -- 实时数据存储
- Redis' versatile in-memory data structures enable building data infrastructure for real-time applications that require low latency and high-throughput.
- 需要低延迟和高吞吐量的实时应用程序(需要快的场景),可以把 Redis 当作数据库使用。
- 这里 Redis 存的是全量数据,不能随意丢失。
Caching & session storage -- 缓存和会话存储
- Redis' speed makes it ideal for caching database queries, complex computations, APl calls, and session state.
- 使用 Redis 作为缓存。
- 这里 Redis 存的是部分数据,全量数据使用类似于 MySQL 这样的数据库存储。Redis 存的部分数据丢失了,也可以从全量数据里面进行恢复。
- session storage 会话存储,可以单独设置一台服务器用来存储用户会话。用于解决同一个用户的请求都打在同一台服务器上的问题,使用 Redis 进行会话存储之后,就不要求同一个用户的请求都打在同一台服务器上了,而且还有一个优点,应用程序重启之后可以保证会话不丢失,会话丢失也不怕,用户重新登陆就好了。
Streaming & messaging -- 消息队列
- The stream data type enables high-rate data ingestion, messaging, event sourcing, and notifications.
- 消息队列指的是消息队列服务器,网络版本的生产者消费者模型。
- 使用消息队列的场景少,因为有更优秀的消息队列,比如 RabbitMQ,Kafka 等。
此外,在这些场景也是很适合,比如排行榜系统,计数器应用,社交网络。
- 排行榜系统:排行榜系统⼏乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis 提供了列表和有序集合的结构,合理地使用这些数据结构可以很⽅便地构建各种排行榜系统。
- 计数器应用:计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的实时性,每一次播放和浏览都要做加 1 的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis 天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择。
- 社交网络:赞 / 踩、粉丝、共同好友 / 喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,⽽且传统的关系型数据不太合适保存这种类型的数据,Redis 提供的数据结构可以相对比较容易地实现这些功能。
--------------- END ---------------
「 作者 」 枫叶先生
「 更新 」 2024.7.18
「 声明 」 余之才疏学浅,故所撰文疏漏难免,
或有谬误或不准确之处,敬请读者批评指正。
3_【Redis】Redis 特性介绍
http://114.132.213.38:6250/archives/ae1d3e3d-2aac-4c98-8087-c3be1119ccf7
评论