目录
- 热身
- KEYS pattern
- EXISTS key
- DEL key [key ...]
- TYPE key
- 字符串类型(string)
- 散列类型(hash)
- 列表类型(list)
- 集合类型(set)
- 有序集合类型(sorted set)
热身
KEYS pattern
获取符合规则的键名列表
KEYS pattern
pattern支持glob风格通配符格式,具体规则如下
符号 | 含义 |
? | 匹配一个字符 |
* | 匹配任意个(包括0个)字符 |
[] | 匹配括号间的任一字符,可以使用“-”符号表示一个范围,如a[b-d]可以匹配“ab”、“ac”、“ad” |
\x | 匹配字符x,用于转义符号。如要匹配“?”就需要使用? |
注意:KEYS命令需要遍历Redis中的所有键,当键的数量较多时会影响性能,不建议在生产环境中使用
EXISTS key
判断一个键是否存在。如果键存在则返回整数类型1,否则返回0
DEL key [key ...]
可以删除一个或多个键,返回值是删除的键的个数
TYPE key
获得键值的数据类型
字符串类型(string)
介绍
字符串类型是Redis中最基本的数据类型,他能存储任何形式的字符串。一个字符串类型键允许存储的数据的最大容量是512MB
常用命令
- SET key value
赋值
- GET key
取值
- INCR key
让当前键值递增,并返回递增的值
- INCRBY key increment
通过increment参数指定一次增加的数值
- DESR key
让当前键值递减
- DESRBY key increment
通过increment参数指定一次递减的数值
- INCRBYFLOAT key increment
通过increment参数指定一次增加的双精度浮点数
- APPEND key value
向键值的末尾追加value
- STRLEN key
返回键值的长度
- MSET key value [key value ...]
同时设置多个键值
- **MGET key [key ...]
同时获取多个键值
- GETBIT key offset
获得一个字符串类型指定位置的二进制位的值(0或1),索引从0开始
- SETBIT key offset value
设置字符串类型键指定位置的二进制位的值
- BITCOUNT key [start] [end]
获得字符串类型键中值是1的二进制位个数,可以通过参数来限制统计的字节范围
- BITOP operation destkey key [key ...]
对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中
散列类型(hash)
介绍
散列类型存储字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,即不能嵌套其他的数据类型。一个散列类型键可以包含至多232-1个字段。
注意:232-1指的是2的32次方减1=4294967295
常用命令
- HSET key field value
赋值
- HGET key field
取值
- HMSET key field value [field value ...]
同时设置多个字段的值
- HMGET key field [field ...]
同时获取多个字段的值
- HGETALL key
获取键中所有的字段和字段值
- HEXISTS key field
判断字段是否存在
- HSETNX key field value
当字段不存在时赋值,该操作是原子操作
- HINCRBY key field increment
使字段值增加指定的整数。散列类型没有HINCR命令
- HDEL key field [field ...]
删除一个或多个字段
- HKEYS key
获取字段名
- HVALS key
获取字段值
- HLEN key
获取字段数量
列表类型(list)
介绍
列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。
使用链表的代价是通过索引访问元素比较慢。
一个列表类型键最多能容纳232-1个元素
注意:232-1指的是2的32次方减1=4294967295
常用命令
- LPUSH key value [value ...]
向列表左边增加元素
- RPUSH key value [value ...]
向列表右边增加元素
- LPOP key
从列表左端弹出元素
- RPOP key
从列表右端弹出元素
- LLEN key
获取列表中元素的个数
- LRANGE key start stop
获取列表中的某一片段,返回索引从start到stop之间的所有元素(包含两端的元素)。列表起始所有为0
LRANGE 支持负索引,表示从右边开始计算序数,如“-1”表示最右边第一个元素,“-2”表示最右边第二个元素,以此类推
LRANGE key 0 -1 可以获取列表中的所有元素。还有一些特殊情况:
- 如果start的索引位置比stop的索引位置靠后,则会返回空列表
- 如果stop大于实际的索引范围,则会返回到列表最右边的元素
- LREM key count value
删除列表中前count个值为value的元素,返回值是实际删除的元素个数
- 当count>0时,LREM命令会从列表左边开始删除前count个值为value的元素
- 当count<0时,LREM命令会从列表右边开始删除前count个值为value的元素
- 当count=0时,LREM命令会删除所有值为value的元素
- LINDEX key index
获得指定索引的元素值
- LSET key index value
设置指定索引的原始值
- LTRIM key start end
删除指定索引范围之外的所有元素
- LINSERT key BEFORE|AFTER pivot value
向列表中插入元素。首先在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。
- RPOPLPUSH source destination
将元素从一个列表转到另一个列表。先从source列表类型键中右边弹出一个元素,然后将其加入到destination列表类型键的左边,并返回这个元素的值,整个过程是原子的。
集合类型(set)
介绍
集合中的每个元素都是不同的,且没有顺序。一个集合类型键可以存储至多232-1个字符串。集合类型的常用操作是向集合中加入或删除元素、判断元素是否存在等。集合类型在Redis内部是使用值为空的散列表(hash table)实现的,时间复杂度都是0(1)。最方便的是多个集合类型键之间可以进行并集、交集、差集运算。
集合和列表的区别:
集合类型 | 列表类型 | |
存储内容 | 232-1 | 232-1 |
有序性 | 否 | 是 |
唯一性 | 是 | 否 |
常用命令
- SADD key member [member ...]
向集合中添加一个或多个元素,如果键不存在则会自动创建。如果元素已存在则忽略。
- SREM key member [member ...]
从集合中删除一个或多个元素,并返回删除成功的个数
- SMEMBERS key
返回集合中的所有元素
- SISMEMBER key member
判断元素是否在集合中,时间复杂度为0(1)。无论集合中有多少元素,SISMEMBER始终可以极快地返回结果。
- SDIFF key [key ...]
对多个集合执行差集运算
- SINTER key [key ...]
对多个集合执行交集运算
- SUNION key [key ...]
对多个集合执行并集运算
- SCARD key
获得集合中的元素个数
- SDIFFSTORE destination key [key ...]
对多个集合执行差集运算,并将结果存储在destination键中
- SINTERSTORE destination key [key ...]
对多个集合执行交集运算,并将结果存储在destination键中
- SUNIONSTORE destination key [key ...]
对多个集合执行并集运算,并将结果存储在destination键中
- SRANDMEMBER key [count]
随机获取集合中的元素,可以传递count参数一次随机获取多个元素
- SPOP key
从集合中随机选择一个元素弹出,返回弹出的元素
有序集合类型(sorted set)
介绍
在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等有关的操作。集合中的每个元素都是不同的,分数可以相同。
有序集合类型和列表类型的相同点
- 二者都是有序的
- 二者都可以获得某一范围的元素
有序集合类型和列表类型的不同点
- 列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢
- 有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度是O(log(N)))
- 列表中不能简单地调整某个元素的位置,单式有序集合可以(通过更改这个元素的分数)
- 有序集合要比列表类型更耗费内存
常用命令
- ZADD key score member [score member]
向有序集合中加入一个元素和该元素的分数,如果该元素已存在则会用新的分数替换原有的分数。分数不仅可以是整数,还支持双精度浮点数。
- ZSCORE key member
获取元素的分数
- ZRANGE key start stop [WITHSCORE]
按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)。索引从0开始,负数代表从后往前查找(-1表示最后一个元素)
WITHSCORE参数代表同时获得元素的分数。
ZRANGE命令的时间复杂度为0(logn+m),n为有序集合的基数,m为返回的元素个数。
- ZREVRANGE key start stop [WITHSCORE]
按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素
- ZRANGEBYSCORE key min max [WITHSCORE] [LIMIT offset count]
按照元素分数从小到大的顺序返回分数在min和max之间的(包含min和max)元素
WITHSCORE参数代表同时获得元素的分数。
[LIMIT offset count] 代表在获取的元素列表上向后偏移offset个元素,并且只获取前count个元素
- ZREVRANGEBYSCORE key max min [WITHSCORE] [LIMIT offset count]
和ZRANGEBYSCORE类似,区别是:
- 按照元素分数从大到小的顺序返回结果
- min和max参数的顺序和ZRANGEBYSCORE命令是相反的
- ZINCRBY key increment member
增加某个元素的分数,返回更改后的分数。increment 也可以是负数,代表减分。如果指定的元素不存在,Redisz在执行命令前会先建立它并将它的分数赋为0再执行操作。
- ZCARD key
获取集合中元素的数量
- ZCOUNT key min max
获得指定分数范围内的元素个数
- ZREM key member [member ...]
删除一个或多个元素
- ZREMRANGEBYRANK key start stop
按照排名范围删除元素。元素分数从小到大的顺序(即索引0表示最小的值)删除处在指定排名范围内的所有元素,并返回删除的元素数量。
- ZRANK key member
获得元素的排名,按照元素从小到大的顺序获得指定的元素的排名(从0开始,即分数最小的元素排名为0)。
- ZINTERSTORE destination numkeys key [key …]
计算有序集合的交集。该命令还支持 WEIGHTS、AGREGATE SUM| MIN| MAX 参数,因比较复杂,具体用法请查阅资料。
- ZUNIONSTORE destination numkeys key [key …]
计算有序集合的并集。该命令还支持 WEIGHTS、AGREGATE SUM| MIN| MAX 参数,因比较复杂,具体用法请查阅资料。