一. 简介
Redis是⼀种基于键值对(key–value)的 NoSQL 数据库(非关系型数据库)(而MySQL是基于表的数据库(关系型数据库))。
1. 特性
In-memory data structures
Redis 是将数据以键值对的方式存储在内存之中的。键值对中的value可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成。
Programmability
Redis 具有可编程性。在Redis 7及更高版本中,可以使用Redis函数来管理和运行脚本,而在Redis 6.2及更低版本中,可以使用Lua脚本和EVAL命令对Redis进行编程。
而当运行脚本或函数时,Redis保证其原子执行。脚本的执行在其整个时间内阻塞了所有服务器活动,类似于事务。因此,如果打算在应用程序中使用慢速脚本,所有其他客户端都被阻止,并且在运行时无法执行任何命令。
但脚本的执行时间最长(默认设置为5秒),当脚本达到超时阈值时,Redis不会自动终止脚本。而是再次开始接受来自其他客户端的命令,但将以BUSY错误回复发送正常命令的所有客户端。此状态下唯一允许的命令是SCRIPT KILL、FUNCTION KILL和SHUTDOWN NOSAVE。可以使用SCRIPT KILL和FUNCTION KILL命令终止仅执行只读命令的脚本。如果脚本执行了写入操作,那么我们就只能使用SHUTDOWN NOSAVE命令,它会在不将当前数据集保存在磁盘上的情况下停止服务器。
Extensibility
Redis 具有可扩展性。Redis的API模块本质上是一个动态链接库,当其被导出时,是一个名为redismodule.h的C头文件, 可以使用C++或其他具有C绑定功能的语言来进行编写(例如C++ / Rust)。在编写完毕之后,可以在启动时或使用MODULE LOAD命令加载到Redis中。