1. Redis的十大数据类型及常用命令
Redis是key-value键值对类型的数据库,我们所说的数据类型指的是value的数据类型,key的数据类型都是字符串。
1.1 字符串(String)
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
- 常用命令
命令 | 说明 |
---|---|
SET key value | 设置指定key的值 |
GET key | 获取指定key的值 |
GETRANGE key start end | 返回key中字符串的子字符[0,-1]表示全部 |
GETSET key value | 将指定的key的值设置为value,并返回key的旧值 |
GETBIT key offset | 对key所存储的字符串值,获取指定偏移量上的位(bit) 例如k1 h h对应的十六进制为01101000,对应的 GETBIT k1 0的值是0,GETBIT k1 1的值是1 GETBIT k1 7的值为0 |
MGET key1 [key2] | 获取所有指定的key的值 |
SETBIT key offset value | 对key锁存储的字符串值,设置或清除指定偏移量上的位(bit) |
SETEX key second value | 将值value关联到key,并将key的过期时间设为value秒 |
SETNX key value | 只有在key不存在时设置key的值 |
SETRANGE key offset value | 用value复写key的值,从偏移量offset开始 |
STRLEN key | 返回key所存储的字符串值的长度 |
MSET key1 value1 [key2 value2] | 同时设置一个或多个key-value键值对 |
MSETNX key1 value1 [key2 value2] | 同时设置一个或多个key-value键值对,当且仅当所有key都不存在时 |
PSETEX key millisecounds value | 这个命令和SETEX命令相似,但他以毫秒为单位设置key的生存时间,而不是像SETEX命令那样,以秒为单位 |
INCR key | 将key中存储的数字值增加1 |
INCRBY key increment | 将key所存储的的值加上指定的值(increment) |
INCRBYFLOAT key increment | 将key所存储的的值加上指定的浮点值(increment) |
DECR key | 将key中存储的数值减1 |
DECRBY key decrement | key所存储的值减去指定的值(decrement) |
APPEND key value | 如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值的末尾 |
- set 命令详细介绍
set key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL] - keepttl 已经存在的key-value在重新set时,会改变过期时间,使用keepttl参数,保留原始的过期时间。
实际应用方面
比如点赞谋篇文章或抖音无限点赞,可以使用incr key 命令增加1
比如可以使用过期时间来设置分布式锁,在这先了解一下概念和思路,之后高级篇会详细讲解
1.2 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素),对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
lpush k1 v1 v2 v3 v4 v5 v6 v7 其中v7是头,v1是尾
- 常用命令
命令 | 说明 |
---|---|
LPUSH key value1 [value2…] | 将value1、value2… 按照从左向右插入到列表头部,最后输入的value在最前面,返回值为列表的长度 |
RPUSH key value1 [value2…] | 将value1、value2… 按照从右向左插入到列表头部,最后输入的value在最后面,返回值为列表的长度 |
LPUSHX key value1 [value2…] | 将value1、value2… 按照从左向右插入到已经存在的列表头部,最后输入的value在最前面,返回值为列表的长度 |
RPUSHX key value1 [value2…] | 将value1、value2… 按照从右向左插入到已经存在的列表头部,最后输入的value在最后面,返回值为列表的长度 |
LREM key count value | 从列表头开始删除count个value |
LLEN key | 获取列表key的长度(值为列表元素的个数,即最大索引+1) |
LINDEX key index | 通过索引index值获取列表中的元素 |
LRANGE key start stop | 获取列表key指定范围内的元素,【0,-1】表示获取全部元素 |
LSET key index value | 替换index索引对应的值为value |
LTRIM key start stop | 裁剪原列表 |
LINSERT key BEFORE|AFTER pivot value | 在key列表从头到尾的顺序第一个匹配pivot元素值的前或者后面增加值value |
LPOP key count | 移出并获取列表头的count个元素 |
RPOP key count | 移出并获取列表尾的count个元素 |
BLPOP key1 [key2] timeout | 移出并获取列表的第一个元素(key1列表结束后开始key2列表),如果列表没有元素会阻塞列表直到等待timeout秒后超时或发现可移出元素为止 |
BRPOP key1 [key2] timeout | 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待timeout秒后超时或发现可移出元素为止 |
BRPOPLPUSH source destination timeout | 移出source列表的最后一个值,并放入destination列表的最后,如果列表没有元素会阻塞列表直到等待timeout秒或发现可移除元素为止 |
RPOPLPUSH source destination | RPOPLPUSH为BRPOPLPUSH的非阻塞版本 |
1.3 哈希(Hash)
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。
- 常用命令
命令 | 说明 |
---|---|
HMSET key field1 value1 [field2 value2 …] | 设置hash值 |
HGETALL key | 获取hash的所有field和value |
HGET key field | 获取一个hash对应的field的value |
HMGET key field1 [field2 …] | 获取一个或多个hash对应的field的value |
HKEYS key | 获取hash所有的key值 |
HVALS key | 获取hash所有key对应的value |
HLEN key | 获取hash对应的filed的数量 |
HSTRLEN key field | 获取hash指定field的value的长度 |
HEXISTS key field | 判断hash是否存在指定的field |
HSET key field value | 设置hash对应的field和value |
HSETNX key field value | 仅当指定的field在hash中不存在时才设置value |
HINCRBY key field increment | 将hash中指定的field的整型值增加increment |
HINCRBYFLOAT key field increment | 将hash中指定的field的值增加increment |
HSCAN key cusror [MATCH pattern] [COUNT count] | 不知道,没用明白 |
1.4 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset(整数集合) 或者 hashtable(字典或者也叫哈希表)。
Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)
- 常用命令
命令 | 说明 |
---|---|
SADD key member1 [member2…] | 添加一个或多个元素到集合里 |
SCARD key | 获取集合里的元素数量 |
SDIFF key1 [key2…] | 获取key1中不存在于其他key的元素 |
SDIFFSTORE destination key1 [key2…] | 获取队列不存在的元素,并存储在destination中,destination存在则会重新生成dstination |
SINTER key1 [key2…] | 获取多个key集合的交集 |
SINTERSTORE destination key1 [key2…] | 获取多个集合的交集,并存储在destination中,destination存在则会重新生成dstination |
SISMEMBER key member | 确定一个给定的值是一个集合的成员 |
SMEMBERS key | 获取集合里面的所有元素 |
SMOVE source destination member | 移动集合里的一个元素到另一个集合 |
SPOP key [count] | 删除并获取一个集合里面的count个元素 |
SRANDMEMBER key [count] | 从集合里面随机获取count个元素 |
SREM key member1 [member2…] | 从集合里删除一个或多个元素 |
SUNION key1 [key2…] | 获取多个集合的元素(不会有重复的元素) |
SUNIONSTORE destination key1 [key2…] | 合并set元素,并将结果存入到destination中 |
SINTERCARD numkeys key1 [key2…] [LIMIT limit] | 返回指定结果集的交集产生的集合的基数 |
SSCAN key cursor [MATCH pattern] [COUNT count] | 不知道,没用明白 |
1.5 有序集合(ZSet)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1。
- 常用命令
命令 | 说明 |
---|---|
ZADD key [NX\XX] [CH] [INCR] score1 member1 [score 2 member2] | XX: 仅仅更新存在的成员,不添加新成员。 NX: 不更新存在的成员。只添加新成员。 CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,ZADD返回值只计算新添加成员的数量。 INCR: 当ZADD指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。 |
ZCARD key | 获取一个排序集合中的成员数量 |
ZCOUNT key min max | 返回分数范围内的成员数量 |
ZINCRBY key increment member | 将一名成员的评分增加increment |
ZRANGE key start stop [WITHSCORES] | 返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递增(从小到大)来排序。具有相同 score 值的成员按字典序(lexicographical order )来排列。 |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。该选项自 Redis 2.0 版本起可用。 |
ZRANK key member | 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。排名以 0 为底,也就是说, score 值最小的成员排名为 0 。 |
ZREM key member [member …] | 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。 |
ZREMRANGEBYRANK key start stop | 移除有序集 key 中,指定排名(rank)区间内的所有成员。区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。 |
ZREMRANGEBYSCORE key min max | 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。自版本2.1.6开始, score 值等于 min 或 max 的成员也可以不包括在内,详情请参见 ZRANGEBYSCORE 命令。 |
ZREVRANGE key start stop [WITHSCORES] | 返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到小)来排列。具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列。除了成员按 score 值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。 |
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] | 返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。具有相同 score 值的成员按字典序的逆序(reverse lexicographical order )排列。除了成员按 score 值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一样。 |
ZREVRANK key member | 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。排名以 0 为底,也就是说, score 值最大的成员排名为 0 。使用 ZRANK 命令可以获得成员按 score 值递增(从小到大)排列的排名。 |
ZSCORE key member | 返回有序集 key 中,成员 member 的 score 值。如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。 |
ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] | 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。 |
ZINTERSTORE destination numberkeys key1 [key2…] [WEIGHTS weight] [SUM|MIN|MAX] | 计算给定的numkeys个有序集合的交集,并且把结果放到destination中。 在给定要计算的key和其它参数之前,必须先给定key个数(numberkeys)。 默认情况下,结果中一个元素的分数是有序集合中该元素分数之和,前提是该元素在这些有序集合中都存在。因为交集要求其成员必须是给定的每个有序集合中的成员,结果集中的每个元素的分数和输入的有序集合个数相等。如果destination存在,就把它覆盖。 |
1.6 地理空间(GEO)
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,包括:
添加地理位置的坐标。
获取地理位置的坐标。
计算两个位置之间的距离。
根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名取得他在地球的位置。
将三维的地球变为二维的坐标,再将二维的坐标转换为一维的点块,最后将一维的点块转换为二进制再通过base32编码。
如何获取某个地址的经纬度:
https://api.map.baidu.com/lbsapi/getpoint/
- 常用命令
命令 | 说明 |
---|---|
GEOADD key longitude latitude member [longitude latitude member …] | 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。 |
GEOHASH key member [member …] | 时间复杂度:O(log(N)) for each member requested, where N is the number of elements in the sorted set.返回一个或多个位置元素的 Geohash 表示。通常使用表示位置的元素使用不同的技术,使用Geohash位置52点整数编码。由于编码和解码过程中所使用的初始最小和最大坐标不同,编码的编码也不同于标准。此命令返回一个标准的Geohash,在维基百科和geohash.org网站都有相关描述 |
GEOPOS key member [member …] | 从key里返回所有给定位置元素的位置(经度和纬度)。 |
GEODIST key member1 member2 [unit] | 返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。指定单位的参数 unit 必须是以下单位的其中一个:m 表示单位为米。km 表示单位为千米。mi 表示单位为英里。ft 表示单位为英尺。如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。 |
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] | 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。范围可以使用以下其中一个单位:m 表示单位为米。km 表示单位为千米。mi 表示单位为英里。ft 表示单位为英尺。 |
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] | 这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点指定成员的位置被用作查询的中心。 |
处理中文显式乱码
使用 rwa参数
redis -cli --raw
1.7 基数统计(HyperLogLog)
HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
需求:
统计某个网站、某篇文章的UV(UNIQUE VISITOR)
功能:
一种去重复后的真实个数的数据集。
常用命令:
命令 | 说明 |
---|---|
PFADD key element [element …] | 将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中. |
PFCOUNT key [key …] | 当参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数,如果该变量不存在,则返回0. |
PFMERGE destkey sourcekey [sourcekey …] | 将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集. |
1.8 位图(bitmap)
由0和1状态表现的二进制位的bit数组
需求:
每日签到、上下班打卡
常用命令:
命令 | 说明 |
---|---|
SETBIT key offset value | 设置或者清空key的value(字符串)在offset处的bit值。 |
GETBIT key offset | 返回key对应的string在offset处的bit值 当offset超出了字符串长度的时候,这个字符串就被假定为由0比特填充的连续空间。当key不存在的时候,它就认为是一个空字符串,所以offset总是超出范围,然后value也被认为是由0比特填充的连续空间。到内存分配。 |
STRLEN key | 返回key的string类型value的长度。如果key对应的非string类型,就返回错误。 |
BITCOUNT key [start end] | 统计字符串被设置为1的bit数.一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。 |
BITOP operation destkey key [key …] | 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。 |
应用场景:
1.9 位域(bitfield)
通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。
说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。
将一个Redis字符串看作是一个由二进制位组成的数组,并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。
1.10 流(Stream)
Redis Stream 是 Redis 5.0 版本新增加的数据结构。
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。
Stream结构:
1 | Message Content | 消息内容 |
2 | Consumer group | 消费组,通过XGROUP CREATE 命令创建,同一个消费组可以有多个消费者 |
3 | Last_delivered_id | 游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。 |
4 | Consumer | 消费者,消费组中的消费者 |
5 | Pending_ids | 消费者会有一个状态变量,用于记录被当前消费已读取但未ack的消息Id,如果客户端没有ack,这个变量里面的消息ID会越来越多,一旦某个消息被ack它就开始减少。这个pending_ids变量在Redis官方被称之为 PEL(Pending Entries List),记录了当前已经被客户端读取的消息,但是还没有 ack (Acknowledge character:确认字符),它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了没处理 |
队列常用命令:
命令 | 说明 |
---|---|
XADD key ID field string [field string …] | 将指定的流条目追加到指定key的流中。 如果key不存在,作为运行这个命令的副作用,将使用流的条目自动创建key。 |
XRANGE key start end [COUNT count] | 此命令返回流中满足给定ID范围的条目。范围由最小和最大ID指定。所有ID在指定的两个ID之间或与其中一个ID相等(闭合区间)的条目将会被返回。XRANGE命令有许多用途:返回特定时间范围的项目。这是可能的,因为流的ID与时间相关。增量迭代流,每次迭代只返回几个项目。但它在语义上比SCAN函数族强大很多。从流中获取单个条目,提供要获取两次的条目的ID:作为查询间隔的开始和结束。该命令还有一个倒序命令,以相反的顺序返回项目,叫做XREVRANGE,除了返回顺序相反以外,它们是完全相同的。 |
XREVRANGE | 此命令与XRANGE完全相同,但显著的区别是以相反的顺序返回条目,并以相反的顺序获取开始-结束参数:在XREVRANGE中,你需要先指定结束ID,再指定开始ID,该命令就会从结束ID侧开始生成两个ID之间(或完全相同)的所有元素。因此,例如,要获得从较高ID到较低ID的所有元素,可以使用:XREVRANGE + - |
XDEL | 从指定流中移除指定的条目,并返回成功删除的条目的数量,在传递的ID不存在的情况下, 返回的数量可能与传递的ID数量不同。 |
XLEN | 返回流中的条目数。如果指定的key不存在,则此命令返回0,就好像该流为空。 但是请注意,与其他的Redis类型不同,零长度流是可能的,所以你应该调用TYPE 或者 EXISTS 来检查一个key是否存在。 |
XTRIM | XTRIM将流裁剪为指定数量的项目,如有需要,将驱逐旧的项目(ID较小的项目)。此命令被设想为接受多种修整策略,但目前只实现了一种,即MAXLEN,并且与XADD中的MAXLEN选项完全相同。 |
XREAD | 从一个或者多个流中读取数据,仅返回ID大于调用者报告的最后接收ID的条目。此命令有一个阻塞选项,用于等待可用的项目,类似于BRPOP或者BZPOPMIN等等。 |
消费常用命令:
命令 | 说明 |
---|---|
XGROUP [CREATE key groupname id-or-$] [SETID key id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername] | 该命令用于管理流数据结构关联的消费者组。使用XGROUP你可以:创建与流关联的新消费者组。销毁一个消费者组。从消费者组中移除指定的消费者。将消费者组的最后交付ID设置为其他内容。要创建一个新的消费者组,请使用以下格式:XGROUP CREATE mystream consumer-group-name $ |
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …] | XREADGROUP命令是XREAD命令的特殊版本,支持消费者组。在阅读本页之前,你可能必须先理解XREAD命令才有意义。 |
XPENDING | 通过消费者组从流中获取数据,而不是确认这些数据,具有创建待处理条目的效果。这在XREADGROUP命令中已有详尽的说明,在我们的Redis Streams介绍中更好。XACK命令会立即从待处理条目列表(PEL)中移除待处理条目,因为一旦消息被成功处理,消费者组就不再需要跟踪它并记住消息的当前所有者。 |
XACK | XACK命令用于从流的消费者组的待处理条目列表(简称PEL)中删除一条或多条消息。 当一条消息交付到某个消费者时,它将被存储在PEL中等待处理, 这通常出现在作为调用XREADGROUP命令的副作用,或者一个消费者通过调用XCLAIM命令接管消息的时候。 待处理消息被交付到某些消费者,但是服务器尚不确定它是否至少被处理了一次。 因此对新调用XREADGROUP来获取消费者的消息历史记录(比如用0作为ID)将返回此类消息。 类似地,待处理的消息将由检查PEL的XPENDING命令列出。 |
1.11 Redis常用命令
命令 | 说明 |
---|---|
keys * | 查看当前库所有的key |
exists key | 判断某刻key是否存在 |
type key | 查看key的类型 |
del key | 删除指定的key |
unlink key | 非阻塞删除,仅仅将key从keyspace元数据中删除,真正的删除会在后续异步执行 |
ttl key | 查看还有多少表过期,-1表示永不过期,-2表示已过期 |
expire key 秒 | 设置key多少秒后过期 |
pexpire 毫秒 | 设置key多少毫秒后过期 |
expireat 秒(时间戳格式) | 设置key什么时候过期 |
pexpireat 毫秒(时间戳格式) | 设置key什么时候过期 |
move key dbindex[0-15] | 将当前库的key移动到指定库中 |
select dbindex[0-15] | 切换数据库[0-15],默认为0,单例模式redis会一次性创建16个库 集群模式下只有一个库db0 |
dbsize | 查看当前库的key数量 |
flushdb | 清空当前库 |
flushall | 清空所有库 |
Redis常用命令查询网址
-
中文
http://www.redis.cn/commands.html -
英文
https://redis.io/commands -
命令参考
http://doc.redisfans.com/index.html
命令不区分大小写,Key是大小写敏感的
永远的帮助命令 help@类型 例如:help @string