Redis入门

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类型的分数用于元素从小到大排序

image-20200602155740727

(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 时, 这个消息就会被发送给订阅它的三个客户端。

pubsub1

pubsub2

4 事务

Redis事务可以一次执行多个命令。

事务保证:

  • 发送EXEC命令前,批量操作被放入队列缓存
  • 收到EXEC命令并进入事务执行时,命令成功状态不影响其他命令执行
  • 事务执行时,其他客户端的命令不会插入到当前事务命令中

事务执行三阶段:

  • 开始事务
  • 命令入队
  • 执行事务

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

5 脚本

https://www.runoob.com/redis/redis-scripting.html

参考资料

Redis 教程