Redis数据类型
常见类型
- string字符串类型
- list列表类型
- set集合类型
- sortedset(zset)有序集合类型
- hash类型
不常见类型
- bitmap位图类型
- geo地理位置类型
String字符串类型
Redis的String能表达3种值的类型:
- 字符串
- 整数
- 浮点数
字符串相关命令如下表所示:
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
SET | SET key value [EX seconds] [PX milliseconds] [ NX][ XX ] | 给指定的key赋值为value ,EX设置秒级过期时间,PX设置毫秒级过期时间,NX表示key不存在时设置,XX表示key存在时设置 | O(1) |
SETRANGE | SETRANGE key offset value | 覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度 | O(1) |
SETBIT | SETBIT key offset value | 设置key的value在offset处的bit值。 | O(1) |
SETNX | SETNX key value | 当key不存在时才会赋值 | O(1) |
SETEX | SETEX key seconds value | 设置指定的key的value并加入秒级的过期时间 | O(1) |
PSETEX | PSETEX key milliseconds value | 设置指定的key的value并加入毫秒级的过期时间 | O(1) |
GET | GET key | 获取指定key的值 | O(1) |
GETSET | GETSET key value | 给指定的key赋值为value,并获取赋值之前的值 | O(1) |
GETBIT | GETBIT key offset | 返回key对应的string在offset处的bit值 当offset超出了字符串长度的时候,这个字符串就被假定为由0比特填充的连续空间。 | O(1) |
GETRANGE | GETRANGE key start end | 返回key对应的字符串value的子串 | O(N) |
APPEND | APPEND key value | 如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作 | O(1) |
STRLEN | STRLEN key | 返回key的string类型value的长度。如果key对应的非string类型,就返回错误。 | O(1) |
BITCOUNT | BITCOUNT key [start end] | 统计字符串被设置为1的bit数,一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。 | O(N) |
BITFIELD | BITFIELD key [GET type offset] [SETtype offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL] | 本命令会把Redis字符串当作位数组,并能对变长位宽和任意未字节对齐的指定整型位域进行寻址。 | O(1) |
BITOP | BITOP <AND |OR | NOT|XOR> destkey key [key …] | 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。 | O(N) |
BITPOS | BITPOS key bit [start] [end] | 返回字符串里面第一个被设置为1或者0的bit位。 | O(N) |
DECR | DECR key | 对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0 | O(1) |
DECRBY | DECRBY key | 将key对应的数字减decrement。如果key不存在,那么在操作之前,这个key对应的值会被置为0 | O(1) |
INCR | INCR key | 对存储在指定key的数值执行原子的加1操作。 | O(1) |
INCRBY | INCRBY key increment | 将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。 | O(1) |
INCRBYFLOAT | INCRBYFLOAT key increment | 通过指定浮点数key来增长浮点数increment. 当键不存在时,先将其值设为0再操作 | O(1) |
MGET | MGET MGET key [key …] | 返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil | O(N) |
MSET | MSET key value [key value …] | 批量进行SET操作 | O(N) |
MSETNX | MSETNX key value [key value …] | 批量进行SETNX操作 | O(N) |
LIST集合类型
- list列表类型可以存储有序、可重复的元素
- 获取头部或尾部附近的记录是极快的
- list的元素个数最多为2^32-1个(40亿)
集合相关命令如下表所示:
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
BLPOP | BLPOP key [key …] timeout | 弹出指定key列表的头元素,当给定列表内没有任何元素可供弹出的时候, 连接将被 BLPOP 命令阻塞,timeout可以指定阻塞的时长,为0则一直阻塞 | O(1) |
BRPOP | BRPOP key [key …] timeout | 弹出指定key列表的尾元素,当给定列表内没有任何元素可供弹出的时候, 连接将被 BLPOP 命令阻塞,timeout可以指定阻塞的时长,为0则一直阻塞 | O(1) |
BRPOPLPUSH | BRPOPLPUSH source destination timeout | 弹出指定source列表的尾元素,并将弹出的元素压入到destination 的列表头部,当给定source列表内没有任何元素可供弹出的时候, 连接将被阻塞,timeout可以指定阻塞的时长,为0则一直阻塞 | O(1) |
LINDEX | LINDEX key index | 返回指定key列表中索引是index的元素 | O(N) |
LINSERT | LINSERT key BEFORE|AFTER pivot value | 指定key的列表中,将value值存储到pivot元素的前面或后面 | O(N) |
LLEN | LLEN key | 返回存储在 key 里的list的长度 | O(1) |
LPOP | LPOP key | 移除并且返回 key 对应的 list 的第一个元素 | O(1) |
LPUSH | LPUSH key value | 向指定key的集合头部压入value元素 | O(1) |
LPUSHX | LPUSHX key value [value …] | 只有当 key 已经存在并且存着一个 list 的时候,将所有指定的值插入到存于 key 的列表的头部 | O(1) |
LRANGE | LRANGE key start stop | 返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标 | O(N) |
LREM | LREM key count value | 从指定 key 的列表里移除前 count 次出现的值为 value 的元素 | O(N) |
LSET | LSET key index value | 覆盖指定索引的集合元素 | O(N) |
LTRIM | LTRIM key start stop | 只保留指定索引位置的集合元素 | O(N) |
RPOP | RPOP key | 移除并且返回 key 对应的 list 的最后一个元素 | O(1) |
RPOPLPUSH | RPOPLPUSH source destination | 弹出指定source列表的尾元素,并将弹出的元素压入到destination 的列表头部 | O(1) |
RPUSH | RPUSH key value | 向指定key的集合尾部压入value元素 | O(1) |
LPUSHX | LPUSHX key value [value …] | 只有当 key 已经存在并且存着一个 list 的时候,将所有指定的值插入到存于 key 的列表的尾部 | O(1) |
SET集合类型
- 无序、唯一元素
- 集合中最大的成员数为 2^32 - 1
集合相关命令如下表所示:
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
SADD | SADD key member [member …] | 向指定key的集合中插入member元素 | O(1) |
SCARD | SCARD key | 返回指定key集合的元素数量 | O(1) |
SDIFF | SDIFF key [key …] | 返回所有给定集合的差集的元素集合. | O(N) |
SDIFFSTORE | SDIFFSTORE destination key [key …] | 计算出所有给定集合的差集的元素集合并存储到指定的集合destination 中 | O(N) |
SINTER | SINTER key [key …] | 返回所有给定集合的交集的元素集合 | O(N) |
SINTERSTORE | SINTERSTORE destination key [key …] | 计算出所有给定集合的交集的元素集合并存储到指定的集合destination 中 | O(N) |
SISMEMBER | SISMEMBER key member | 返回成员 member 是否是存储的集合 key的成员 | O(1) |
SMEMBERS | SMEMBERS key | 返回key集合所有的元素. | O(N) |
SMOVE | SMOVE source destination member | 将member从source集合移动到destination集合中 | O(1) |
SPOP | SPOP key [count] | 从存储在key的集合中移除并返回一个或多个随机元素。 | O(1) |
SRANDMEMBER | SRANDMEMBER key [count] | 从存储在key的集合中返回一个或多个随机元素。 | O(1) |
SREM | SREM key member [member …] | 在key集合中移除指定的元素 | O(N) |
SSCAN | SSCAN key cursor [MATCH pattern] [COUNT count] | 用于迭代SET集合中的元素 | O(1) |
SUNION | SUNION key [key …] | 返回给定的多个集合的并集中的所有成员. | O(N) |
SUNIONSTORE | SUNIONSTORE destination key [key …] | 计算出所有给定集合的并集的元素集合并存储到指定的集合destination 中 | O(N) |
ZSET有序集合类型
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
ZADD | ZADD key [NX|XX] [CH] [INCR] score member [score member …] | 将所有指定成员添加到键为key有序集合(sorted set)里面。 添加时可以指定多个分数/成员(score/member)对,其中,XX表示仅仅更新存在的成员,不添加新成员,NX表示不更新存在的成员。只添加新成员,CH表示修改返回值为发生变化的成员总数,INCR表示对指定member累加操作。 | O(log(N)) |
ZCARD | ZCARD key | 返回key的有序集元素个数 | O(1) |
ZCOUNT | ZCOUNT key min max | 返回指定集合分数在min和max之间(包括min和max)的元素个数 | O(log(N)) |
ZINCRBY | ZINCRBY key increment member | 为有序集key的成员member的score值加上增量increment | O(log(N)) |
ZINTERSTORE | ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight] [SUM|MIN|MAX] | 计算给定的numkeys个有序集合的交集,并且把结果放到destination中,numkeys指定需要求交集的个数,WEIGHTS指定每个Key的权重,SUM表示将每个集合中key相同的进行求和,MIN表示求最小值,MAX表示求最大值 | O(N)+O(M*log(M)) |
ZLEXCOUNT | ZLEXCOUNT key minmember maxmeneber | 计算有序集合中在指定成员分数之间的成员数量 | O(log(N)) |
ZPOPMAX | ZPOPMAX key [count] | 删除并返回count个有序集合key中最高得分的成员 | O(log(N)*M) |
ZPOPMIN | ZPOPMIN key [count] | 删除并返回count个有序集合key中最低得分的成员 | O(log(N)*M) |
ZRANGE | ZRANGE key start stop [WITHSCORES] | 返回存储在有序集合key中的指定范围的元素。 返回的元素按得分从最低到最高排列。 如果得分相同,将按字典排序。 | O(log(N)+M) |
ZREVRANGE | ZREVRANGE key start stop [WITHSCORES] | 返回存储在有序集合key中的指定范围的元素。 返回的元素按得分从最高到低高排列。 如果得分相同,将按字典排序。 | O(log(N)+M) |
ZRANGEBYLEX | ZRANGEBYLEX key minmember maxmeneber [LIMIT offset count] | 返回指定成员区间内的成员,按成员字典正序排序, 成员分数必须相同 | O(log(N)+M) |
ZREVRANGEBYLEX | ZREVRANGEBYLEX key minmember maxmeneber [LIMIT offset count] | 返回指定成员区间内的成员,按成员字典倒序排序, 成员分数必须相同 | O(log(N)+M) |
ZRANGEBYSCORE | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素),元素从低分到高分排序。 | O(log(N)+M) |
ZREVRANGEBYSCORE | ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素),元素从高分到低分排序。 | O(log(N)+M) |
ZRANK | ZRANK key member | 返回有序集key中成员member的排名,按照正序排序 | O(log(N)) |
ZREVRANK | ZREVRANK key member | 返回有序集key中成员member的排名,按照倒叙排序 | O(log(N)) |
ZREM | ZREM key member [member …] | 删除指定集合中的memeber元素 | O(1) |
ZREMRANGEBYLEX | ZREMRANGEBYLEX key min max | 删除名称按字典由低到高排序成员之间所有成员,成员分数必须相同 | O(log(N)+M) |
ZREMRANGEBYRANK | ZREMRANGEBYRANK key start stop | 删除指定排名区间的由低到高排序成员之间所有成员 | O(log(N)+M) |
ZREMRANGEBYSCORE | ZREMRANGEBYSCORE key key min max | 删除指定分数区间的由低到高排序成员之间所有成员 | O(log(N)+M) |
ZSCAN | ZSCAN key cursor [MATCH pattern] [COUNT count] | 扫描集合中的元素 | O(N) |
ZSCORE | ZSCORE key member | 返回有序集key中,成员member的score值。 | O(1) |
ZUNIONSTORE | ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight] [SUM|MIN|MAX] | 计算给定的numkeys个有序集合的并集,并且把结果放到destination中。在给定要计算的key和其它参数之前,必须先给定key个数(numberkeys)。 默认情况下,结果集中某个成员的score值是所有给定集下该成员score值之和。 | O(N)+O(M log(M)) |
HASH类型
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
HDEL | HDEL key field [field …] | 从 key 指定的哈希集中移除指定的字段 | O(1) |
HEXISTS | HEXISTS key field | 返回hash里面field是否存在 | O(1) |
HGET | HGET key field | 返回 key 指定的哈希集中字段的值 | O(1) |
HGETALL | HGETALL key | 返回 key 指定的哈希集中所有的字段和值 | O(N) |
HINCRBY | HINCRBY key field increment | 增加 key 指定的哈希集中指定字段的数值 | O(1) |
HINCRBYFLOAT | HINCRBYFLOAT key field increment | 增加 key 指定的哈希集中指定字段的数值 | O(1) |
HKEYS | HKEYS key field | 返回 key 指定的哈希集中所有字段的名字。 | O(N) |
HLEN | HLEN key | 返回 key 指定的哈希集包含的字段的数量。 | O(1) |
HMGET | HMGET key field [field …] | 返回 key 指定的哈希集中指定字段的值 | O(N) |
HMSET | HMSET key field value [field value …] | 设置 key 指定的哈希集中指定字段的值 | O(N) |
HSCAN | HSCAN key cursor [MATCH pattern] [COUNT count] | 扫描哈希集数据 | O(1) |
HSET | HSET key field value | 设置 key 指定的哈希集中指定字段的值 | O(1) |
HSETNX | HSETNX key field value | 只在 key 指定的哈希集中不存在指定的字段时,设置字段的值 | O(1) |
HSTRLEN | HSTRLEN key field | 返回hash指定field的value的字符串长度 | O(1) |
HVALS | HVALS key | 返回 key 指定的哈希集中所有字段的值。 | O(1) |
GEO类型
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
GEOADD | GEOADD key longitude latitude member [longitude latitude member …] | 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中 | O(log(N)) |
GEODIST | GEODIST key member1 member2 [unit] | 返回两个给定位置之间的距离。 | O(log(N)) |
GEOHASH | GEOHASH key member [member …] | 返回一个或多个位置元素的hash值 | O(log(N)) |
GEOPOS | GEOPOS key member [member …] | 从key里返回所有给定位置元素的位置(经度和纬度) | O(log(N)) |
GEORADIUS | GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] | 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。 | O(N+log(M)) |
GEORADIUSBYMEMBER | GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] | 这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点指定成员的位置被用作查询的中心。 | O(N+log(M)) |
PUB/SUB类型
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
PSUBSCRIBE | PSUBSCRIBE pattern [pattern …] | 订阅给定的模式(patterns)。 | O(N) |
PUBLISH | PUBLISH channel message | 将信息 message 发送到指定的频道 channel | O(N) |
PUBSUB | PUBSUB subcommand [argument [argument …]] | PUBSUB 是自省命令,能够检测PUB/SUB子系统的状态。它由分别详细描述的子命令组成。 | - |
PUBSUB CHANNELS | PUBSUB CHANNELS [pattern] | 列出当前活跃的队列.活跃是指队列含有一个或多个订阅者 | O(N) |
PUBSUB NUMSUB | PUBSUB NUMSUB [channel-1 … channel-N] | 列出指定队列的订阅者个数 | O(N) |
PUBSUB NUMPAT | PUBSUB NUMPAT | 返回订阅模式的数量 | O(N) |
PUNSUBSCRIBE | PUNSUBSCRIBE [pattern [pattern …]] | 客户端退订指定模式的队列,如果没有提供模式则取消订阅所有模式匹配的队列 | O(N) |
SUBSCRIBE | SUBSCRIBE [channel [channel …]] | 订阅指定队列 | O(N) |
UNSUBSCRIBE | UNSUBSCRIBE [channel [channel …]] | 取消订阅指定队列 | O(N) |
STREAMS类型
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
XACK | XACK key group ID [ID …] | 从流的消费者组的待处理条目列表(简称PEL)中删除一条或多条消息。 | O(logN) |
XADD | XADD key ID field string [field string …] | 将指定的流条目追加到指定key的流中 | O(logN) |
XCLAIM | XCLAIM key group consumer min-idle-time ID [ID …] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [FORCE] [JUSTID] | 在流的消费者组上下文中,此命令改变待处理消息的所有权, 因此新的所有者是在命令参数中指定的消费者 | O(logN) |
XDEL | XDEL key ID [ID …] | 从指定流中移除指定的条目,并返回成功删除的条目的数量 | O(logN) |
XGROUP | XGROUP [CREATE key groupname id-or- ] [ S E T I D k e y i d − o r − ] [SETID key id-or- ][SETIDkeyid−or−] [DESTROY key groupname] [DELCONSUMER key groupname consumername] | 用于管理流数据结构关联的消费者组,创建与流关联的新消费者组。该命令可以销毁一个消费者组、从消费者组中移除指定的消费者、将消费者组的最后交付ID设置为其他内容。 | O(logN) |
XINFO | XINFO [CONSUMERS key groupname] key key [HELP] | 用于检索关于流和关联的消费者组的不同的信息, | O(N) |
XINFO STREAM | XINFO STREAM key | 返回有关存储在特定键的流的一般信息 | O(N) |
XINFO GROUPS | XINFO GROUPS key | 获得与流关联的所有消费者组的输出 | O(N) |
XINFO CONSUMERS | XINFO CONSUMERS key group | 取得指定消费者组中的消费者列表 | O(N) |
XLEN | XLEN key | 返回流中的条目数 | O(1) |
XPENDING | XPENDING key group [start end count] [consumer] | 通过消费者组从流中获取数据 | O(logN+M) |
XRANGE | XRANGE key start end [COUNT count] | 返回流中满足给定ID范围的条目,范围由最小和最大ID指定 | O(logN) |
XREVRANGE | XREVRANGE key start end [COUNT count] | 返回流中满足给定ID范围的条目,范围由最小和最大ID指定 | O(logN) |
XREAD | XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …] | 从一个或者多个流中读取数据,仅返回ID大于指定的条目ID。 | O(logN) |
XREADGROUP | XREADGROUP [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …] | XREADGROUP命令是XREAD命令的特殊版本,支持消费者组 | O(logN + M) |
XTRIM | XTRIM key MAXLEN [~] count | 将流裁剪为指定数量的项目 |
SCRIPTING类型
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
EVAL | EVAL script numkeys key [key …] arg [arg …] | 使用内置的 Lua 解释器,可以对 Lua 脚本进行求值 | - |
EVALSHA | EVALSHA sha1 numkeys key [key …] arg [arg …] | 根据给定的 SHA1 校验码,对缓存在服务器中的脚本进行求值 | - |
SCRIPT DEBUG | SCRIPT DEBUG YES|SYNC|NO | 使用EVAL可以开启对脚本的调试,YES. 打开非阻塞异步调试模式,调试Lua脚本(回退数据修改)、SYNC. 打开阻塞同步调试模式,调试Lua脚本(保留数据修改稿)、NO. 关闭脚本调试模式 | - |
SCRIPT EXISTS | SCRIPT EXISTS script [script …] | 检查脚本是否存在脚本缓存里面 | - |
**SCRIPT FLUSH ** | **SCRIPT FLUSH ** | 清空Lua脚本缓存 | - |
**SCRIPT KILL ** | **SCRIPT KILL ** | 杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。 | - |
SCRIPT LOAD | SCRIPT LOAD script | 将脚本 script 添加到脚本缓存中,但并不立即执行该脚本 | - |
TRANSACTIONS类型
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
DISCARD | DISCARD | 刷新一个事务中所有在排队等待的指令,并且将连接状态恢复到正常 | - |
EXEC | EXEC | 执行事务中所有在排队等待的指令并将链接状态恢复到正常 | - |
MULTI | MULTI | 标记一个事务块的开始。 随后的指令将在执行EXEC时作为一个原子执行。 | - |
UNWATCH | UNWATCH | 刷新一个事务中已被监视的所有key。 | - |
WATCH | WATCH key [key …]标记所有指定的key 被监视起来 | - |
HYPERLOGLOG类型
命令名称 | 命令操作 | 命令描述 | 时间复杂度 |
---|---|---|---|
PFADD | PFADD key element [element …] | 将元素添加到指定Key的HyperLogLog结构中 | - |
PFCOUNT | PFCOUNT key [key …] | 返回存储在HyperLogLog结构体的指定key的近似基数,如果该key不存在,则返回0. | - |
PFMERGE | PFMERGE destkey sourcekey [sourcekey …] | 将多个 HyperLogLog 合并(merge)为一个 HyperLogLog | - |