Redis_03_常用命令


前面介绍了Redis中的基础知识以及提供的数据结构,接下来本文介绍Redis中常用的操作命令。

Redis针对每一种数据结构,都提供了一系列命令(相当于MySQL中的增删改查)。由于MySQL是关系型数据库,因此SQL语句比较规范整齐,而Redis的命令则较琐碎。

1. Redis的Key的操作命令

因为数据是以<key, value>的形式存在的。而在任何一种数据结构中,key的形式都是一样的,并且key表示整条数据,所以针对key的操作是统一的,针对key的操作也就代表着针对整条数据的操作,常见的操作有:查询库中所有的key、判断key是否存在、删除key、重命名key等等。

1.1 命令——keys

语法为keys pattern。作用是查找所有符合模式pattern的key,pattern可以使用通配符。常见的通配符如下所示:

  1. *:表示0或多个字符,例如 keys * 查询所有的key。
  2. ?:表示单个字符,例如:wo?d 则匹配word、wood等词汇。
  3. []:表示选择[]内的一个字符,例如wo[or]d匹配word、wood,不匹配wold等。注意,只能从[]里面取,且必须取。

1.2 命令——exists

语法为exists key。作用是判断指定的key是否在数据库中存在,存在返回1,否则返回0。注意,不能使用通配符,只能是特定的key。

也可以判断多个key是否存在,语法为exists key [key key ...],多个key之间用空格隔开,返回值是存在的key的数量。

1.3 命令——move

语法为move key index。作用是移动key表示的数据到指定的数据库实例index。

1.4 命令——ttl

语法为ttl key。作用是查看指定key的剩余生存时间,因为redis数据首先是在内存中存在的,一些数据可能就是用一次,不需要持久化到硬盘中。因此Redis提供了这种机制,如果数据使用了一段时间之后就不再使用了,可以设置该数据的生命周期TTL。

如果key不存在,则返回-2;如果没有设置ttl,即永久存在,返回值为-1;

1.5 命令——expire

语法为expire key time。作用是给key设置时长为time的生存时间,单位是秒。

1.6 命令——type

语法为type key。作用是查看key所表示的value的数据类型。

1.7 命令——rename

语法为rename key newKey。作用是修改key为指定的newKey,即重命名。

1.8 命令——del

语法为del key。作用是删除指定的key,即将该条数据删除。也可以一次性删除多个key,和exists用法一样。返回值是删除的key的数量。

2. 关于string类型数据的操作命令

上面关于key的操作命令实际上是在数据条(k,v)方面进行操作的。而接下来的命令则是在数据条中的value方面进行操作的。主要的操作有:存、查、拼接、长度、数值型字符串的数学运算等等。

2.1 命令——set

语法为set key value。作用是将string类型的数据value存储到Redis中,其“主键”为key。如set zsname zhangsanset zsage 20等等。可以看到,一切数据都被看成是string类型。如果key已经存在,则该操作为更新key的value为指定value。

2.2 命令——get

语法为get key。作用是获取指定key的value。

2.3 命令——append

语法为append key aValue。作用是在指定key的value后面追加指定的字符串aValue。返回值为追加后形成的新的value的字符串长度。注意,如果key不存在,那么该条语句的作用就相当于set设置新数据。

2.4 命令——strlen

语法为strlen key。作用是获取指定key所表示的value字符串的长度。

2.5 命令——incr

语法为incr key。作用是将指定key所表示的value进行加一运算。返回值为运算后的结果。如果value不可进行数学运算,则报错(因此value必须是数值)。如果key不存在,首先会set该key,并初始化为0,进行加一运算。

2.6 命令——decr

语法为decr key。作用是将指定key所表示的value进行减一运算。同上。

2.7 命令——incrby

语法为incrby key offset。作用是将指定key所表示的value进行加指定数offset运算。同上。

2.8 命令——decrby

语法为decrby key offset。作用是将指定key所表示的value进行减指定数offset运算。同上。

2.9 命令——getrange

语法为getrange key startIndex endIndex。作用是获取指定key所表示的value字符串,从下标为startIndex开始到endIndex结束之间的字符串,注意是闭区间。如果没有该key,则返回为””。另外,string字符串下标也可能是负数,和Python中一样,倒数第一个是-1。

2.10 命令——setrange

语法为setrange key startIndex value。作用是更新指定key所表示字符串内容,从startIndex开始覆盖,覆盖的新内容为value。

2.11 命令——setex

语法为setex key time value。作用是设置key-value的同时,设置其生命周期。

2.12 命令——setnx

语法为setnx key value。作用是如果key存在,那么就不会覆盖掉原来的数据,即此次添加数据失败。nx表示not exist的意思。

2.13 命令——mset

语法为mset key1 value1 key2 value2 ...。作用是批量添加kv键值对。

2.14 命令——mget

语法为mget key1 key2 key3...。作用是批量获取指定的key所表示的value字符串。

2.15 命令——msetnx

作用同2.12,即批量设置kv键值对,只有当所有key都不存在时,才会设置成功

3. 关于list类型数据的操作命令

list类型的数据为单个key对应多个value,并且多个value之间是有序的。比如一个人有多个联系方式,此时人就是key,联系方式就是value。list中的value也有下标,和字符串中的下标一样,从0开始,且有负数下标。下标由放入时的顺序决定的。当然,value也可以只存放一个。

因为string类型是单key单value,所以一些有多个value的可以采用list类型来存储。其实list集合,和python中类似,其操作无非就是插入元素、删除元素、修改元素、截取元素等等。

3.1 命令——lpush

语法为lpush key value1 value2 ...。作用是在指定key所表示的value列表中的左侧插入指定的value1、value2…。注意,lpush是在左侧插入,而且是针对每个value都有效,所以最终的顺序是 valueN、value…、value2、value1。如果没有key,则新建一个key,并创建空列表,插入指定的value。

3.2 命令——rpush

语法为rpush key value1 value2 ...。作用是在指定key所表示的value列表中的右侧插入指定的value1、value2…。注意,这是右侧插入,针对每个value都有效。而且没有key则新建key。

3.3 命令——lrange

语法为lrange key startIndex endIndex。作用是获取指定key所表示的value列表中指定下标区间的元素,其实下标为startIndex,终止下标为endIndex,闭区间。

3.4 命令——lpop

语法为lpop key。作用是从指定key所表示的value值列表中移除表头元素,并返回该元素(最左侧)。

3.5 命令——rpop

语法为rpop key。作用是从指定key所表示的value值列表中移除表尾元素,并返回该元素(最右侧)。

3.6 命令——lrem

语法为lrem key count value。作用是从指定key所表示的value值列表中移除值为value的元素(如果有多个,则移除count个;如果count>0,表示从左侧移除count个value相等的元素;如果count<0,表示从右侧移除-count个value相等的元素);如果count=0,表示移除所有等于value的元素。

3.7 命令——lindex

语法为lindex key index。作用是获取key所表示的value列表中指定index下标的元素。

3.8 命令——llen

语法为llen key。作用是获取key所表示的value列表的长度,即元素个数。

3.9 命令——ltrim

语法为ltrim key startIndex endIndex。作用是截取指定key所表示的value列表中指定区间内的元素,起始下标为startIndex、终止下标为endIndex,为闭区间。截取后的元素形成新的列表覆盖掉原有列表。

3.10 命令——lset

语法为lset key index value。作用是修改指定key所表示的value列表中执行索引处的值为value。

3.11 命令——linsert

语法为linsert key before/after pivot value。作用是在指定ket所表示的value列表中值为pivot元素的前/后位置插入value值。

4. 关于set类型数据的操作命令

set集合的特点是单key多value,且value无序,因此数据之间不能重复。存放的顺序和实际访问顺序不一致,所以没有下标,随便插入,按照值来取数据。

4.1 命令——sadd

语法为sadd key valua1 value2 ...。作用是将一个或多个元素添加到指定key所表示的集合中。如果没有key,则新建并创建空集合,如果集合中已有该元素,则忽略该元素。返回值为成功加入的元素个数。

4.2 命令——smembers

语法为smembers key。作用是获取指定key所表示的集合的所有元素。

4.3 命令——sismember

语法为sismember key value。作用是判断指定key所表示的集合中是否存在该元素value。若存在返回1,否则返回0。

4.4 命令——scard

语法为scard key。作用是获取指定key所表示的集合中的元素个数。

4.5 命令——srem

语法为srem key value1 value2 ...。作用是移除指定key所表示的集合中的一个或多个元素。本来就不存在的元素就会被忽略。返回值为成功移除的个数。

4.6 命令——srandmember

语法为srandmember key [count]。作用是随机获取指定key所表示的集合中的一个或count个元素。如果count大于0,则随机获取count个元素,且不重复。如果count小于0,则随机获取-count个元素,允许重复。

4.7 命令——spop

语法为spop key [count]。作用是从指定key所表示的集合中随机移除1个或count个元素。返回值为移除掉的元素。

4.8 命令——smove

语法为smove source dest member。作用是将指定source所表示的集合中指定的member元素移动到其他集合dest中。

4.9 命令——sdiff

语法为sdiff base other1 [other 2 ...]。作用是取集合的差集,即base所表示的集合中有,而其他other集合中没有的元素。

4.10 命令——sinter

语法为sinter key1 key2 ...。作用是取所有集合的交集。

4.11 命令——sunion

语法为sunion key1 key2 ...。作用是取所有集合的并集。

5. 关于hash类型数据的操作命令

hash类型数据的特点是单key单对象,对象中包含多个field-value对。所以说,如果获取具体的value数据,需要一个key,以及更细化的field。

Redis中的hash是一个string类型的key和value的映射表。这里的value是一系列的键值对,hash特别适合用于存储对象。一些典型的操作基本上就是对添加field-value键值对,修改键值对,获取键值对等等,以及对键值对数据进行数学元算等等。

5.1 命令——hset

语法为hset key field1 value1 field2 value2 ... 。作用是将多个field-value键值对封装成对象作为value,并设置key,将其添加到数据库中。如果key已经存在,那么就相当于在所表示的对象中添加field-value键值对。如果field已经存在,则相当于更新其value。

5.2 命令——hget

语法为hget key field。作用是获取指定key所表示的对象中的field属性的value值。

5.3 命令——hmget

语法为hmget key field1 field2 ...。作用是批量获取指定key所表示的对象中的多个field属性的value值。

5.4 命令——hgetall

语法为hgetall key。作用是获取指定key所表示的对象中的所有field-value键值对。

5.5 命令——hdel

语法为hdel key field1 field2 ...。作用是从指定key所表示的对象中删除指定的一个或多个field-value键值对。

5.6 命令——hlen

语法为hlen key。作用是统计指定key所表示的对象中所有的field数量。

5.7 命令——hexists

语法为hexists key field。作用是判断指定的key所表示的对象中是否存在某个field。

5.8 命令——hkeys

语法为hkeys key。作用是获取指定的key所表示的对象中的所有field。

5.9 命令——hvals

语法为hvals key。作用是获取指定的key所表示的对象中的所有value。

5.10 命令——hincrby

语法为hincrby key field int。作用是对指定key所表示的对象中的指定field的value值进行加int运算(注意,只能证书运算)。hincrbyfloat是进行浮点数运算。

5.10 命令——hsetnx

语法为hsetnx key field1 value1。作用是添加数据,但是如果field已经存在,则不会覆盖掉原有数据。

6. 关于zset类型数据的操作命令

zset是有序集合,即集合中的数据是按照指定规则(元素的分数、权重)进行排序存储的。首先它是集合,不重复。另外,元素是按照一定顺序来排序的。所以zset中的元素是有下标的。

Redis有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。不同的是zset的每个元素都会关联一个分数(分数可以重复),Redis通过分数来为集合中的成员进行从大到小的排序。

因此,在存储元素的时候一定要赋予元素一定的分数,zset集合底层是根据分数来对元素进行排序的。

6.1 命令——zadd

语法为zadd key score1 member1 score2 member2 ...。作用是将一个或多个member及其score(分数)值加入有序集合key中。score可以是整数,也可以是小数。返回值是member的个数。如果member已经存在,则会修改其score,重新对集合内的元素排序。

6.2 命令——zrange

语法为zrange key startIndex endIndex [withscores]。作用是获取指定key所表示的zset中的指定下标区间的元素(下标和list一样,有正负之分)。也可以添加可选参数withscores,即显示结果中会有其scores。

6.3 命令——zrangebyscore

语法为zrangebyscore key min max [withscores]。作用是获取指定key所表示的zset中指定score区间内的元素。

6.4 命令——zrem

语法为zrem key member1 member2 ...。作用是删除指定key所表示的zset中指定的一个或多个元素。

6.5 命令——zcard

语法为zcard key。作用是获取指定key所表示的zset中的元素个数。

6.6 命令——zcount

语法为zcount key min max。作用是获取指定key所表示的zset中指定score区间中的元素个数。

6.7 命令——zrank

语法为zrank key member。作用是查看指定key所表示的zset中的指定元素的排名(下标)。

6.8 命令——zscore

语法为zscore key member。作用是获取指定key所表示的zset中的指定元素的score。

6.9 命令——zrevrank

语法为zrevrank key member。作用是查看指定key所表示的zset中的指定元素的逆序排名(下标)。

7. 备注

参考B站《动力节点》。


文章作者: 浮云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 浮云 !
  目录