Redis:五大数据类型常用命令详解

丰富的数据类型是Redis作为缓存系统的最大优势之一,区别于Memcache仅支持简单的key-value类型,Redis提供了list、set、zset、hash等数据结构的存储。

注意:Redis的命令不区分大小写,但是key 严格区分大小写!!!

1. 热身

1.1 获取符合规则的键名列表

keys pattern

pattern是一个支持glob风格的通配符格式,具体规则如下:

符号 含义
? 匹配一个字符
* 匹配任意个字符,包括0个
[] 匹配括号间的任一字符,可是使用“-”符号表示一个范围,比如a[b-d]可以匹配“ab”、“ac”、“ad”。
\x 匹配字符x,用于转义符号。如果要匹配“?”,就需要使用?
  • 案例

我们先往Redis中塞几个键值对:

set color red
set name zhangsan
set age 18

然后使用keys *命令查看获取Redis中所有的键。

在这里插入图片描述

注意:keys命令需要遍历Redis中的所有键,当键的数量较多时会影响性能,不建议在生产环境中使用。

1.2 判断一个键是否存在

exists key [key ...]

如果键存在则返回1,否则返回0。比如:

在这里插入图片描述

1.3 删除某个键

del key [key ...]

删除一个或多个键,返回值是删除的键的个数。比如:

在这里插入图片描述

1.4 获取键值的数据类型

type key

type命令用来获得键值的数据类型,返回值可能是string(字符串类型)、hash(散列类型)、list(列表类型)、set(集合类型)、zset( 有序集合类型)。比如:

在这里插入图片描述

2. string数据类型

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。比如邮箱、JSON化的对象甚至是一张图片。一个字符串类型键允许存储的数据的最大容量是512MB。

string类型在Redis中的相关命令:

命令 用法 描述
set set key value (1)将字符串value值设置到key上;
(2)如果key有对应的值,则会被覆盖;
(3)如果原本key有过期时间,则过期时间会被清除。
get get key (1)返回key对应的字符串值;
(2)如果key无对应值,则返回nil;
(3)如果key对应的值不是字符串,则返回错误,因为get只适用于字符串类型。
mset mset key value [key value …] (1)同时设置一个或多个key-value键值对;
(2)如果key有对应的值,则会被覆盖;
(3)mset是一个原子操作,所有的key都会在同一时间被设置,不会存在有些更新有些没更新的情况。
mget mget key [key …] (1)返回一个或多个给定key对应的值;
(2)某个key不存在时返回nil。
setex setex key seconds value (1)将字符串value值设置到key上;
(2)设置key生存时间为seconds,单位为秒;
(3)如果key有对应的值,则会被覆盖。
setnx setnx key value (1)将key的值设置为value,当且仅当key不存在;
(2)若给定的key已经存在,setnx将不做任何操作。

上面是string类型的基本命令,但是当一个字符串可以转换成数值时,我们可能还会接触到以下几个自增自减操作。

命令 用法 描述
incr incr key (1)对key的值加1,返回增加之后的值;
(2)如果key不存在,则key会被初始化为0,再执行incr操作。
decr decr key (1)对key的值减1。
incrby incrby key increment (1)将key所存储的值加上指定的数值,并返回增加之后的值。
decrby decrby key decrement (1)将key的值减去一个指定的数值。

3. hash数据类型

我们知道Redis是采用字典结构以键值对的形式存储数据的,而hash类型的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其它数据类型。

hash类型适合存储对象:使用对象类型和对象唯一标识作为key,使用对象属性作为字段名,属性值作为字段值。

命令 用法 描述
hset hset key field value (1)设置key的field值为value;
(2)如果key不存在,则直接创建;
(3)如果field值已经存在,则直接覆盖。
hget hget key field (1)获取指定key和field的值。
hdel hdel key field [field …] (1)删除key下的field值;
(2)如果field不存在,则直接忽略。
hexists hexists key filed (1)查看是否存在指定key的field,存在返回1,不存在返回0。
hgetall hgetall key (1)返回指定key的所有字段名和字段值。
hincrby hincrby key field increment (1)对指定key的field字段增加一个数值。
hkeys hkeys key (1)返回指定key的所有字段名。
hlen hlen key (1)返回指定key的所有字段名数量。
hmget hmget key field [field …] (1)返回指定key对应字段名的值。
hmset hmset key field value [field value …] (1)批量设置key的字段名和字段值。
hvals hvals key (1)返回指定key的所有字段值,可对比hkeys命令。

4. list数据类型

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。

列表类型内部使用双向链表实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度越快。但是使用链表的代价是通过索引访问元素比较慢。

命令 用法 描述
lpush lpush key value [value …] (1)将一个或多个值插入到列表key的表头;
(2)如果有多个value值,则从左到右的顺序依次插入表头;
(3)如果key不存在,则会创建一个空列表,然后执行lpush操作;如果key存在,但不是列表类型,则返回错误。
lpushx lpushx key value (1)将value值插入到列表key的表头,当且仅当key存在且是一个列表;
(2)如果key不存在时,lpushx命令什么都不会做。
lpop lpop key (1)移除并返回列表key的头元素。
lrange lrange key start stop (1)返回列表key中指定区间内的元素;
(2)start大于列表最大下标时,返回空列表;
(3)可使用负数下标,-1表示列表最后一个元素,以此类推。
lrem lrem key count value (1)count>0表示从头到尾搜索,移除与value相等的元素,数量为count;
(2)count<0表示从尾到头搜索,移除与value相等的元素,数量为count;
(3)count=0表示移除列表中所有与value相等的元素。
lset lset key index value (1)将列表key下标为index的元素值设置为value;
(2)当index参数超出范围,或对一个空列表进行lset操作时,返回错误。
lindex lindex key index (1)返回列表key中下标为index的元素。
linsert linsert key BEFORE|AFTER pivot value (1)将值value插入列表key中,位于pivot前面或者后面;
(2)当pivot不存在列表key中,或者key不存在时,不执行任何操作。
llen len key (1)返回列表key的长度,当key不存在时,返回0。
rpop rpop key (1)移除并返回列表key的尾元素。
rpoplpush rpoplpush source destination (1)将列表source中最后一个元素弹出并返回给客户端,并且将该元素插入到列表destincation的头部。
rpush rpush key value [value …] (1)将一个或多个值插入到列表key的尾部。
rpushx rpushx key value (1)将value值插入到列表key的表尾,当且仅当key存在且是一个列表;
(2)如果key不存在时,lpushx命令什么都不会做。

5. set数据类型

Redis中的set类型是string类型的无序集合。集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表实现的,所以这些操作的时间复杂度都是O(1)。最方便的是多个集合类型键之间还可以进行并集、交集和差集运算。

命令 用法 描述
sadd sadd key member [member …] (1)将一个或多个member元素加入key中,已存在在集合中的member将被忽略;
(2)如果key不存在,则创建一个只包含member元素的集合;
(3)当key不是集合类型时,将返回一个错误。
scard scard key (1)返回key对应的集合中的元素数量。
sdiff sdiff key [key …] (1)返回所有key对应的集合的差集。
sdiffstore sdiffstore destionation key [key …] (1)返回所有key对应的集合的差集,并把该差集赋值给destionation;
(2)如果destionation已经存在,则直接覆盖。
sinter sinter key [key …] (1)返回所有key对应的集合的交集;
(2)不存在的key被视为空集。
sinterstore sinter destionation key [key …] (1)返回所有key对应的集合的交集,并把该交集赋值给destionation;
(2)如果destionation已经存在,则直接覆盖。
sismember sismember key member (1)判断member元素是否是key的成员,0表示不是,1表示是。
smembers smember key (1)返回集合key中的所有成员;
(2)不存在的key被视为空集。
srem srem key member [member …] (1)移除集合key中的一个或多个member元素,不存在的member将被忽略。
sunion sunion key [key …] (1)返回所有key对应的集合的并集;
(2)不存在的key被视为空集。
sunionstore sunionstore destionation key [key …] (1)返回所有key对应的集合的并集,并把该并集赋值给destionation;
(2)如果destionation已经存在,则直接覆盖。

6. zset数据类型

zset类型也是string类型元素的集合,但是它是有序的。

命令 用法 描述
zadd zadd key score member [score member …] (1)将一个或多个member元素及其score值加入集合key中;
(2)如果member已经是有序集合的元素,那么更新member对应的score并重新插入member保证member在正确的位置上;
(3)score可以是整数也可以是双精度浮点数。
zcard zcard key (1)返回有序集的元素个数。
zcount zcount key min max (1)返回有序集key中,score值>=min且<=max的成员数量
zrange zrange key start stop [withscores] (1)返回有序集key中指定区间内的成员,成员位置按score从小到大排序;
(2)如果score值相同,则按字典排序;
(3)如果要使成员按score从大到小排序,则使用zrevrange命令。
zrank zrank key number (1)返回有序集key中成员member的排名,有序集合按score值从小到大排列;
(2)zrevrank命令将按照score值从大到小排序。
zrem zrem key member [member …] (1)移除有序集key中的一个或多个元素,不存在的元素将被忽略;
(2)当key存在但不是有序集时,返回错误。
zremrangebyrank zremrangerank key start stop (1)移除有序集key中指定排名区间内的所有元素。
zremrangebyscore zremrangescore key min max (1)移除有序集key中所有score值>=min且<=max之间的元素。
——End——
更多精彩分享,可扫码关注微信公众号哦。

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章