文章目录
1. 特性
1.1 速度快
正常情况下,Redis 执行命令的速度非常快,官方给出的数字是读写性能可以达到 10 万 / 秒,当然这也取决于机器的性能,但这里先不讨论机器性能上的差异,只分析⼀下是什么造就了 Redis 如此之快,可以大概归纳为以下四点:
- Redis 的所有数据都是存放在内存中的,把数据放在内存中是 Redis 速度快的最主要原因。
- Redis 是用 C 语⾔实现的,⼀般来说 C 语⾔实现的程序 “距离” 操作系统更近,执行速度相对会更快。
- Redis 使用了单线程,预防了多线程可能产⽣的竞争问题。
Redis 在 6.0 版本引⼊了多线程机制,但主要也是在处理网络和 IO(多路复用,epoll),不涉及到数据命令,即命令的执行仍然采用了单线程模式。 - Redis的核心功能都是比较简单的逻辑,都是一些比较简单的操作内存中的数据结构的功能。
1.2 基于键值对的方式存储组织数据
几乎所有的编程语⾔都提供了类似字典的功能,例如 C++ 里的 map、Java 里的 map、Python 里的 dict 等,类似于这种组织数据的方式叫做基于键值对的方式,与很多键值对数据库不同的是,Redis 中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能提⾼开发效率。
在Redis,key都是string,value可以是字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(ordered set /zet)等数据结构。
MySQL是通过表的方式来存储组织数据的,这种叫做关系型数据库,Redis是通过键值对的方式来存储组织数据的,这种叫做非关系行数据库。
1.3 Programmability(可编程的)
在操作方面,Redis支持可以通过简单的交互式命令进行操作,也可以通过一些脚本(Lua)的方式批量执行一些操作。
1.4 Extensibility(可扩展的)
可以在Redis原有的基础功能之上进行扩展,Redsi提供了一批API接口,可以通过(C/C++、Rust)来对Redis进行扩展(本质上就是一个动态链接库)。比如可以让Redis支持更多的数据结构或者命令。
1.5 Persistence(持久化)
我们现在已经知道Redis是在内存种存放数据的,但是我们又知道内存的数据式易失的,比如进程退出、系统重启都会造成内存中的数据丢失,因此Redis也是支持持久化的。也就是内存中有一份数据,硬盘上也有一份数据,以内存为主,硬盘为辅的方式存储组织数据的。相当于就是用硬盘对数据进行一下备份,当遇突发情况时,可以恢复数据。
1.6 Clustering(集群)
集群也就是支持水平扩展,类似于 “分库分表”。一个Redis能存储的数据是有限的,当遇到上限时,就需要引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分。
1.7 High availablity(高可用)
高可用的意思就是冗余/备份。Redis自身也是支持主从结构的,从节点就相当于主节点的备份,当主节点挂掉之后,从节点就会代替主节点进行工作,不至于服务直接挂掉。
2. 应用场景
2.1 Real-time data store(事实的数据存储)
也就是把Redis当成一个数据库,当需要一个更低的延迟和一个更高的吞吐率时的实时存储时,就可以考虑使用Redis。在大多数情况下,我们平时优先考虑的是 “大”,但有时候可能会考虑 “快”,比如搜索引擎,大概率就是需要用Redis来存储数据。
2.2 Caching(缓存)
见初始Redis,其中有关于缓存的讲解。
2.3 Streaming & messaging
消息队列系统可以说是⼀个⼤型网站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等特性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够⾜够强⼤,但是对于⼀般的消息队列功能基本可以满足。