1 定义
是一个开源的、ANSI C语言编写的、遵守BSD协议的、支持网络、可基于内存持久化的日志型KV数据库。
通常被称为数据结构服务器,可以是字符串、哈希、列表、集合和有序集合。
(1) 优势
性能极高
可达读11w次/s, 写8.1w/s
数据类型丰富
原子
所有操作是原子的,要么成功,要么失败。多个操作可以通过MULTI和EXEC指令包装成事务
特性丰富
支持发布/订阅、通知、key过期等
(2) 与其他KV存储差异
- 支持更加复杂的数据结构,并提供原子操作
- 运行在内存中,处理效率更高;且可以持久化到磁盘,数据容量更大。
2 数据类型
(1) 字符串
最基本的数据类型,二进制安全
与Memchached相同
最大能存储512MB
使用SET和GET
(2) 哈希
HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value
每个hash可存储(2^32) -1个键值对
(3) 列表
双端列表
最多存储(2^32) -1个元素
使用命令lpush、lrange等
(4) 集合
使用哈希表实现,增、删、查复杂度都是常数
最多存储(2^32) -1个元素
使用命令sadd、smembers等
(5) 有序集合
基本与集合一致,不同的是,有一个double类型的分数用于元素从小到大排序
(6) 列表
可从头部或尾部插入元素
最多存储(2^32) -1个元素
(7) 集合
最多存储(2^32) -1个元素
(8) 有序集合
元素关联一个double型分数从小到大排序
最多存储(2^32) -1个元素
(9) HyperLogLog
版本>=2.8.9
用于基数统计。不重复元素的数量?
在输入元素数量和容量很大是,使用固定的空间计算基数所需的空间。如使用12KB空间可计算(2^64)个不同元素的基数。而普通的集合,元素越多,内存耗费越多。
其只计算基数,不存储输入元素。
如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5
3 发布订阅
Redis 客户端可以订阅任意数量的频道。
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端。
4 事务
Redis事务可以一次执行多个命令。
事务保证:
- 发送EXEC命令前,批量操作被放入队列缓存
- 收到EXEC命令并进入事务执行时,命令成功状态不影响其他命令执行
- 事务执行时,其他客户端的命令不会插入到当前事务命令中
事务执行三阶段:
- 开始事务
- 命令入队
- 执行事务
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
5 脚本
https://www.runoob.com/redis/redis-scripting.html