






















REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型
brew services start redis
或
redis-server
redis-cli -h 127.0.0.1 -p 6379
使用redis-cli连接本地服务
zhouxi@zhouxideMacBook-Pro ~ % redis-cli 127.0.0.1:6379>
执行PING指令
127.0.0.1:6379> PING PONG 127.0.0.1:6379>
强制关闭redis服务
127.0.0.1:6379> SET runoobkey redis OK
127.0.0.1:6379> GET runoobkey "redis"
127.0.0.1:6379> DEL runoobkey (integer) 1
判断Key是否存在
127.0.0.1:6379> EXISTS runoobkey (integer) 1
redis哈希
存储哈希值
127.0.0.1:6379> HMSET runoobkey name "redis" description "cac" likes 20 vis 23000 OK
获取全部属性
127.0.0.1:6379> HGETALL runoobkey 1) "name" 2) "redis" 3) "description" 4) "cac" 5) "likes" 6) "20" 7) "vis" 8) "23000"
判断HASH是否存在
获取指定属性
127.0.0.1:6379> HGET runoobkey name "redis"
获取所有key
127.0.0.1:6379> HKEYS runoobkey 1) "name" 2) "description" 3) "likes" 4) "vis"
修改指定属性
127.0.0.1:6379> HSET runoobkey name "hello" (integer) 0
修改多个属性
127.0.0.1:6379> HSET runoobkey name "hello" description "new des" (integer) 0
redis列表
Redis列表是简单的字符串列表,按照插入顺序排序
创建列表并添加两个元素
127.0.0.1:6379> LPUSH runoobkey redis (integer) 1 127.0.0.1:6379> LPUSH runoobkey mongodb (integer) 2
获取指定index的元素
127.0.0.1:6379> LINDEX runoobkey -1 "redis"
向集合中添加值
127.0.0.1:6379> SADD runoobkey redis (integer) 1 127.0.0.1:6379> SADD runoobkey mongodb (integer) 1 127.0.0.1:6379> SADD runoobkey redis (integer) 0
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,这里返回0
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
创建和添加属性
127.0.0.1:6379> ZADD runoobkey 1 redis (integer) 1 127.0.0.1:6379> ZADD runoobkey 2 redis (integer) 0 127.0.0.1:6379> ZADD runoobkey 1 rediss (integer) 1
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
Redis 客户端可以订阅任意数量的频道。
创建一个redis-cli客户端订阅消息
zhouxi@zhouxideMacBook-Pro ~ % redis-cli 127.0.0.1:6379> SUBSCRIBE runoobChat Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "runoobChat"
创建一个redis-cli客户端发送消息
zhouxi@zhouxideMacBook-Pro ~ % redis-cli 127.0.0.1:6379> PUBLISH runoobChat "Redis PUBLISH test" (integer) 1 127.0.0.1:6379>
这是订阅端会收到消息
3) (integer) 1 1) "message" 2) "runoobChat" 3) "Redis PUBLISH test"
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
一个事务从开始到执行会经历以下三个阶段:
以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:
127.0.0.1:6379> MULTI OK 127.0.0.1:6379> SET book-name "hell" QUEUED 127.0.0.1:6379> GET book-name QUEUED 127.0.0.1:6379> EXEC 1) OK 2) "hell" 127.0.0.1:6379>
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
Redis Stream 是 Redis 5.0 版本新增加的数据结构。
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。
每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。

每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。
上图解析:
消息队列相关命令:
消费者组相关命令:
127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379>
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。