此篇文章是我参与 #青训营笔记创作活动 的第4篇笔记
主要是简单记录一下自己在学习 Redis 时遇到的一些要点,
只是个人的一个学习记录,水平不高还望大佬们包容。
安装(Ubuntu)
# apt 安装
sudo apt install redis-server
# 检测
redis-server
使用
-
clear
- 清空屏幕
-
quit
- 退出redis客户端
字符串 String
-
SET 命令
-
设置一个键值对,中间以空格相隔
-
SET name ta0lve
- OK
-
SET Name Ta0lve
- OK
-
-
GET 命令
-
读取一个键对应的值
-
GET name
- "ta0lve"
-
GET Name
- "Ta0lve"
-
-
DEL 命令
-
删除一个键值对
-
DEL name
- (integer) 1
-
GET name
- (nil)
-
-
EXISTS 命令
-
判断一个键值对是否存在
-
EXISTS name
- (integer) 0
-
EXISTS Name
- (integer) 1
-
-
KEYS 命令
-
查找符合条件的键
-
KEYS *
- 查找所有的键
-
KEYS *me
- 查找所有以me结尾的键
-
-
FLUSHALL 命令 (flush all)
-
FLUSHALL
- OK
-
KEYS *
- (empty array)
-
-
EXPIPE 命令
- 设置一个键的过期时间
- EXPIPE name 10
-
TTL 命令(time to live)
-
查看一个键的过期时间
-
TTL Name
- -1(未设置过期时间)
-
TTL name
- 9(还有9秒过期)
-
GET name
- (过期之后再GET值为空)
-
KEYS name
- (使用KEYS命令也看不到这个键)
-
-
SETEX 命令
- SETEX + 键 + 过期时间 + 值
- SETEX name 5 ta0lve
- 当键不存在是才会设置过期时间与值
- 如果键已经存在则不会做任何动作
Redis 默认是使用字符串来存储数据的,且是以二进制的形式存储的,所以可以存储许多类型的数据,但是默认是不支持中文的
想要显示中文需要重新登陆redis,并且加上 --raw 参数,表示以原始的形式显示内容。
列表 List
可以看做是一个双向队列,也可以实现一个栈
-
LPUSH
-
LPUSH letter 1
- (integer) 1
- push 一个元素 1
-
像栈一样是头部添加,新添加的元素在头部
- 头插法,后进的元素在前面,"后来居上"
-
可以一次push多个元素
- LPUSH 2 3 4
- 从左到右添加,所以4最后进
- 此时排序为 "4" "3" "2" "1"
-
-
LRANGE
-
LRANGE letter 0 -1
- 1)"a"
- 0 -1表示从第一个元素到最后一个元素
-
-
RPUSH
- 从尾部插入,尾插法
-
LPOP
-
从列表的头部删除元素
- 返回被删除的元素
-
LPOP letter 2
- 一次删除多个元素(这里是两个)
- (过老版本的redis可能会报错,忽略即可)
-
-
RPOP
- 从列表的尾部删除元素
-
LIEN
-
查看列表的长度
-
LIEN letter
- (integer) 3
- 表示列表中现在还有三个元素
-
-
LTRIM
- 删除列表中指定范围以外的元素
- trim 修剪,只保留start和stop之间的元素
-
flushall
- 清空所有数据
集合 Set
set 是一种无序集合,其内部的元素不可重复
list 中的元素则具有顺序,且是可以重复的
-
SADD
-
SADD course Redis
- (integer) 1
-
SADD course Redis
- (integer) 0
- 重复添加,添加失败
-
-
SMEMBERS
-
members 查看该集合中的元素
-
SMEMBERS course
- 1)"Redis"
-
-
SISMEMBER
-
判断一个元素是否在集合中
-
SISMEMBERS course Redis
- (integer) 1
-
-
SREM
-
删除集合中的元素
-
SREM course Redis
- (integer) 1
-
SMEMBERS course
- (empty list or set)
-
-
在Redis中支持集合的相关运算
-
SINTER
- inter
-
SUNION
- union
-
SDIFF
- diff
-
有序集合 SortedSet
有序集合(ZSet)的每个元素都会关联一个浮点类型的分数,然后按照这个分数来对集合中的元素进行从小到大的排序(有点像优先级队列)
有序集合的元素都是唯一的,但是有序集合元素所关联的分数是可以重复的
有序集合的命令都是以 Z 开头
-
ZADD
-
ZADD + 集合的名字 + 集合的元素(分数+成员)
-
ZADD result 680 华清 670 大北 660 旦复 650 大浙
- 4
-
-
ZRANGE
-
ZRANGE 0 -1
- 大浙
- 旦复
- 大北
- 华清
-
ZRANGE 0 -1 WITHSCORES
- 大浙
- 650
- 旦复
- 660
- 大北
- 670
- 华清
- 680
- (withscores)
-
-
ZSCORE
-
查看某个成员的分数
-
ZSCORE result 华清
- 680
-
-
ZRANK
-
查看某个成员的排名
-
ZRANK result 华清
- 3
- index = 3,即从小到大排是第4位
-
-
ZREVRANK
-
查看某个成员在从大到小的顺序中的排名
-
ZREVRANK result 华清
- 0
- index = 0
-
-
ZREM
- 删除某个成员
哈希 Hash
哈希是一个字符类型的字段和值的映射表,简单来说就是一个键值对的集合,十分适合用来存储对象。
哈希相关的命令都是以 H 开头
-
HSET
- HSET person name laoyang
- HSET person age 100
-
HGET
-
HGET person name
- laoyang
-
HGET person age
- 100
-
HGETALL person
- name
- laoyang
- age
- 100
-
-
HDEL
- 删除某个键值对
-
HEXISTS
- exists 判断某个键值对是否存在
-
HKEYS
- 获取哈希中的所有键
-
HLENS
- 获取哈希中的所有键值对的数量
发布订阅模式
-
SUBSCRIBE
- subscribe 订阅
- SUBSCRIBE Ta0lve
- 订阅一个频道
-
publish
- publish Ta0lve git
- 在频道上发布消息"git"
-
一个频道可以有多个终端订阅
-
局限性
- 消息无法持久化
- 无法记录历史消息
- 可以通过 stream流 数据结构来解决
消息队列 Stream
Stream 相关的命令1都以 X 开头
-
XADD
-
向Stream中添加消息
-
XADD geekhour * course redis
- "168645710450-0"
- 回显消息即为消息的ID
- 命令中的"*"表示自动生成一个消息ID,不同消息 ID不同
- 自动生成的ID是保持递增的
-
XADD geekhour * course redis
-
消息ID格式为 1-0
- 第一个整数表示一个时间戳,第二个整数表示一个序列号
-
-
-
XLEN
- 查看Stream中消息的数量
-
XRANGE
-
查看Stream中消息的详细内容
-
XRANGE geekhour - +
- 减号与加号表示所有信息
-
-
XDEL
-
删除消息,后加消息的ID
-
XDEL geekhour 168645710450-0
- (integer) 1
-
-
XTRIM
-
XTRIM geekhour MAXLEN 0
- 删除所有信息
- 2
- 表示一共删除了两条信息
-
-
XREAD
-
XREAD COUNT 2 BLOCK 1000 STREAMS geekhour 0
- COUNT 2 表示一次读取两条消息
- BLOCK 1000 表示如果没有消息的话就阻塞1000毫秒,即1秒
- STREAMS 后加上消息队列的名称
- 0 表示从 index = 0 开始读取
-
XREAD COUNT 2 BLOCK 1000 STREAMS geekhour $
- $ 表示获取从现在开始的最新消息
-
-
XGROUP
- XGROUP CREATE geekhour group1 0
- 创建一个名称为 group1的消费者组
-
XINFO
-
XINFO GROUPS geekhour
- 返回组的名称,消费者的数量,待处理的消息数等等
-
-
XGROUP
-
XGROUP CREATECONSUMER geekhour group1 cousumer1
- create consumer 添加消费者
-
-
XREADDROUP
-
XREADDROUP GROUP group1 consumer1 COUNT 2 BLOCK 3000 STREAMS geekhour >
- ">"表示从这个消息中读取最新的消息
-
未完待续
- 地理空间Geospatial
- HyperLogLog
- 位图Bitmap
- 位域Bitfield
- 事务
- 持久化
- 主从复制
- 哨兵模式
附录
本文参考链接及推荐阅读: