Redis常用基本类型之一,存入Redis的所有key都是字符类型,常用于保存Session信息
命令 | 含义 | 复杂度 |
set | 设置 key value | o (1) |
get | 获取 key 对应的 value 值 | o (1) |
del | 删除 key | o (1) |
setnx | key 不存在时创建 key | o (1) |
senxx | key 存在时更新 key 值 | o (1) |
incr | 计数加操作 | o (1) |
decr | 计数减操作 | o (1) |
mset | 批量设置 key value | o (n) |
mget | 批量获取 key 对应的 value 值 | o (n) |
SET key value [EX seconds] [PX milliseconds] [NX|XX]
(相关资料图)
可用版本: >= 1.0.0时间复杂度: O(1)将字符串值
value
关联到key
。如果
key
已经持有其他值,SET
就覆写旧值, 无视类型。当
SET
命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。可选参数
从 Redis 2.6.12 版本开始,
SET
命令的行为可以通过一系列参数来修改:
EXseconds
: 将键的过期时间设置为seconds
秒。 执行SETkeyvalueEXseconds
的效果等同于执行SETEXkeysecondsvalue
。
PXmilliseconds
: 将键的过期时间设置为milliseconds
毫秒。 执行SETkeyvaluePXmilliseconds
的效果等同于执行PSETEXkeymillisecondsvalue
。
NX
: 只在键不存在时, 才对键进行设置操作。 执行SETkeyvalueNX
的效果等同于执行SETNXkeyvalue
。
XX
: 只在键已经存在时, 才对键进行设置操作。
127.0.0.1:6379> set key1 value1 #设置key value 值,无论是否存在都执行OK127.0.0.1:6379> type key1 #查看key的数据类型string127.0.0.1:6379> set key2 value2 ex 3 #设置有效期为3s的keyOK127.0.0.1:6379> set key3 value3 nx #当key值不存在时创建key,相当于新增keyOK127.0.0.1:6379> set key3 value3 nx(nil)127.0.0.1:6379> set key4 value4 xx #当key值存在时对key的值进行更新,相当于更新key(nil)127.0.0.1:6379> set key4 value4 nxOK127.0.0.1:6379> set key4 value_4 xxOK2、GET 获取一个key的内容
127.0.0.1:6379> get key1"value1"127.0.0.1:6379> get key3"value3"3、DEL 删除一个和多个key
127.0.0.1:6379> keys *1) "key3"2) "key2"3) "key1"127.0.0.1:6379> del key1 key2(integer) 2127.0.0.1:6379> keys *1) "key3"127.0.0.1:6379> del key3(integer) 1127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379>4、MSET 批量创建多个key
127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3OK5、MGET 批量获取多个key
127.0.0.1:6379> mget key1 key2 key3 #获取多个key对应的value值1) "value1"2) "value2"3) "value3"127.0.0.1:6379> keys ke* #获取ke开头的所有key1) "key3"2) "key2"3) "key1"127.0.0.1:6379> keys * #获取所有key1) "key3"2) "key2"3) "key1"6、APPEND 追加内容
127.0.0.1:6379> append key1 " this is append"(integer) 21127.0.0.1:6379> get key1"value1 this is append"127.0.0.1:6379>7、GETSET 设置新值并返回旧值
127.0.0.1:6379> set key4 value4OK127.0.0.1:6379> getset key4 newdata4"value4"127.0.0.1:6379> get key4"newdata4"8、STRLEN 返回字符串key对应的字符数
127.0.0.1:6379> set name janzen.qiuOK127.0.0.1:6379> get name"janzen.qiu"127.0.0.1:6379> strlen name(integer) 10127.0.0.1:6379> set addr 深圳市¸ OK127.0.0.1:6379> get addr"\xe6\xb7\xb1\xe5\x9c\xb3\xe5\xb8\x82\xb8\x82"127.0.0.1:6379> strlen addr(integer) 119、EXISTS 判断key是否存在
127.0.0.1:6379> keys *1) "key3"2) "key4"3) "name"4) "addr"5) "key2"6) "key1"127.0.0.1:6379> exists key(integer) 0127.0.0.1:6379> exists key1 key2(integer) 210、TTL 查看key值过期时间
#TTL11、EXPIRE 重新设置key过期时间可以查看key剩余有效期单位为s,过期后的key会被自动删除#-1:表示永不过期,默认key的有效期都为永不过期#-2:表示指定key不存在127.0.0.1:6379> ttl keytemp(integer) 54127.0.0.1:6379> ttl keytemp(integer) 52127.0.0.1:6379> ttl keytemp(integer) 51127.0.0.1:6379> ttl key1(integer) -1127.0.0.1:6379> ttl key(integer) -2127.0.0.1:6379>
127.0.0.1:6379> ttl keytemp(integer) 196127.0.0.1:6379> expire keytemp 800 #expire 命令结果为重置过期时间(integer) 1127.0.0.1:6379> ttl keytemp(integer) 799127.0.0.1:6379> ttl keytemp(integer) 793127.0.0.1:6379> expire keytemp 400(integer) 1127.0.0.1:6379> ttl keytemp(integer) 399127.0.0.1:6379>12、PERSIST 取消key值过期时间
127.0.0.1:6379> ttl keytemp(integer) 333127.0.0.1:6379> persist keytemp(integer) 1127.0.0.1:6379> ttl keytemp(integer) -113、INCR 数值加计算
可利用INCR命令簇(INCR、INCRBY、INCRBYFLOAT)对可转化为数值的字符类型进行加计算
INCR
:对可转化为整形的字符进行递增加1(效果等同于 INCRBY KEY 1),如果key不存在则初始化key为0后进行处理 INCRBY
:对可转化为整形的字符进行增加 int ,如果key不存在则初始化key为0后进行处理 INCRBYFLOAT
:对可转化为 整形或浮点数 的字符进行增加 float ,如果key不存在则初始化key为0后进行处理
127.0.0.1:6379> set num 100OK#递增+1127.0.0.1:6379> incr num(integer) 101127.0.0.1:6379> incr num(integer) 102#初始化key之后递增+1127.0.0.1:6379> incr num1(integer) 1#数值加计算127.0.0.1:6379> incrby num 20(integer) 122127.0.0.1:6379> incrby num -15(integer) 107#初始化key后,进行加计算127.0.0.1:6379> incrby num2 24(integer) 24#初始化key,进行浮点数加计算127.0.0.1:6379> incrbyfloat numf 20.1"20.1"#浮点数加计算127.0.0.1:6379> incrbyfloat numf 2.8"22.9"127.0.0.1:6379> incrbyfloat numf -3.4"19.5"127.0.0.1:6379> incrbyfloat numf -10"9.5"127.0.0.1:6379> incrbyfloat numf 20"29.5"14、DECR 数值减计算
可利用DECR命令簇(DECR、DECRBY)对可转化为整形的字符类型进行加计算(不可处理浮点型内容)
DECR
:对可转化为整形的字符进行递减1(效果等同于 DECRBY KEY 1),如果key不存在则初始化key为0后进行处理 DECRBY
:对可转化为整形的字符减 int ,如果key不存在则初始化key为0后进行处理
#初始化key,进行递减-1127.0.0.1:6379> decr num3(integer) -1#递减-1127.0.0.1:6379> decr num3(integer) -2#初始化key,进行减计算127.0.0.1:6379> decrby num4 20(integer) -20#减计算127.0.0.1:6379> decrby num3 10(integer) -12127.0.0.1:6379> decrby num3 -20(integer) 8#不可处理浮点型内容127.0.0.1:6379> get numf"29.5"127.0.0.1:6379> decr numf(error) ERR value is not an integer or out of range127.0.0.1:6379> decrby numf 10(error) ERR value is not an integer or out of range二、列表 list
1、LPUSH RPUSH 生成列表并插入数据列表类型本质上是一个可双向读写的的管道,头部为左侧,尾部为右侧。一个列表最多可包含 2^32-1(4294967295)个元素,0为初始下标表示第一个元素,也可使用-1 表示最后一个元素的下标,元素值可以重复。
常用于日志和队列场景。
列表特点:
有序性元素可重复左右双向可操作
LPUSH key value [value …]可用版本: >= 1.0.0
时间复杂度: O(1)
将一个或多个值
value
插入到列表key
的表头如果有多个
value
值,那么各个value
值按从左到右的顺序依次插入到表头: 比如说,对空列表mylist
执行命令LPUSHmylistabc
,列表的值将是cba
,这等同于原子性地执行LPUSHmylista
、LPUSHmylistb
和LPUSHmylistc
三个命令。如果
LPUSHX key valuekey
不存在,一个空列表会被创建并执行 LPUSH操作,当key
存在但不是列表类型时,返回一个错误。可用版本: >= 2.2.0
时间复杂度: O(1)
将值
value
插入到列表key
的表头,当且仅当key
存在并且是一个列表。和LPUSH key value [value …]命令相反,当
key
不存在时,LPUSHX命令什么也不做。
RPUSH key value [value …]可用版本: >= 1.0.0时间复杂度: O(1)将一个或多个值value
插入到列表key
的表尾(最右边)。如果有多个value
值,那么各个value
值按从左到右的顺序依次插入到表尾:比如对一个空列表mylist
执行RPUSHmylistabc
,得出的结果列表为abc
,等同于执行命令RPUSHmylista
、RPUSHmylistb
、RPUSHmylistc
。如果key
不存在,一个空列表会被创建并执行RPUSH操作。当key
存在但不是列表类型时,返回一个错误。RPUSHX key value可用版本: >= 2.2.0时间复杂度: O(1)将值value
插入到列表key
的表尾,当且仅当key
存在并且是一个列表。和RPUSH key value [value …]命令相反,当key
不存在时,RPUSHX命令什么也不做。
127.0.0.1:6379> lpush list1 a b c d e(integer) 5127.0.0.1:6379> rpush list2 a b c d e(integer) 52、LPUSH RPUSH 向列表追加数据
127.0.0.1:6379> lpush list1 f(integer) 6#从右边添加元素,其余元素将向左移动127.0.0.1:6379> rpush list2 f(integer) 63、获取列表长度
LLEN key可用版本: >= 1.0.0时间复杂度: O(1)返回列表
key
的长度。如果
key
不存在,则key
被解释为一个空列表,返回0
.如果
key
不是列表类型,返回一个错误。
127.0.0.1:6379> llen list1(integer) 6127.0.0.1:6379> llen list2(integer) 64、获取列表指定位置数据
LRANGE key start stop可用版本: >= 1.0.0时间复杂度: O(S+N),S
为偏移量start
,N
为指定区间内元素的数量。返回列表
key
中指定区间内的元素,区间以偏移量start
和stop
指定。下标(index)参数
start
和stop
都以0
为底,也就是说,以0
表示列表的第一个元素,以1
表示列表的第二个元素,以此类推。你也可以使用负数下标,以
LINDEX key index可用版本: >= 1.0.0时间复杂度:O(N),-1
表示列表的最后一个元素,-2
表示列表的倒数第二个元素,以此类推。N
为到达下标index
过程中经过的元素数量。因此,对列表的头元素和尾元素执行LINDEX命令,复杂度为O(1)。返回列表
key
中,下标为index
的元素。下标(index)参数
start
和stop
都以0
为底,也就是说,以0
表示列表的第一个元素,以1
表示列表的第二个元素,以此类推。你也可以使用负数下标,以
-1
表示列表的最后一个元素,-2
表示列表的倒数第二个元素,以此类推。如果
key
不是列表类型,返回一个错误。
127.0.0.1:6379> rpush list a b c d e(integer) 5#查看单个指定位置的元素127.0.0.1:6379> lindex list 0"a"127.0.0.1:6379> lindex list 1"b"127.0.0.1:6379> lindex list 2"c"127.0.0.1:6379> lindex list 3"d"127.0.0.1:6379> lindex list 4"e"#查看指定范围的元素127.0.0.1:6379> lrange list 0 41) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> lrange list 2 41) "c"2) "d"3) "e"127.0.0.1:6379> lrange list 0 -1 #未知列表长度时,查看所有元素1) "a"2) "b"3) "c"4) "d"5) "e"#起始下标位置必须位于结束下标左侧127.0.0.1:6379> lrange list -1 0(empty list or set)127.0.0.1:6379> lrange list -1 2(empty list or set)127.0.0.1:6379> lrange list 2 -5(empty list or set)5、修改列表指定索引值的元素
LSET key index value可用版本: >= 1.0.0时间复杂度:对头元素或尾元素进行LSET操作,复杂度为 O(1)。其他情况下,为 O(N),N
为列表的长度。将列表
key
下标为index
的元素的值设置为value
。当
index
参数超出范围,或对一个空列表(key
不存在)进行LSET时,返回一个错误。
127.0.0.1:6379> lrange list 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> lset list 2 nOK127.0.0.1:6379> lrange list 0 -11) "a"2) "b"3) "n"4) "d"5) "e"6、移除列表数据
LPOP key可用版本: >= 1.0.0
时间复杂度: O(1)移除并返回列表
RPOP keykey
的头元素。可用版本: >= 1.0.0
时间复杂度: O(1)
移除并返回列表
key
的尾元素。
127.0.0.1:6379> rpush list a b c d e(integer) 5#删除列表头元素127.0.0.1:6379> lrange list 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> lpop list"a"127.0.0.1:6379> lrange list 0 -11) "b"2) "c"3) "d"4) "e"#删除列表尾元素127.0.0.1:6379> lrange list 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> rpop list"e"127.0.0.1:6379> lrange list 0 -11) "a"2) "b"3) "c"4) "d"
LREM key count value可用版本: >= 1.0.0时间复杂度: O(N),N
为列表的长度。根据参数
count
的值,移除列表中与参数value
相等的元素。
count
的值可以是以下几种:count>0
: 从表头开始向表尾搜索,移除与value
相等的元素,数量为count
。count<0
: 从表尾开始向表头搜索,移除与value
相等的元素,数量为count
的绝对值。count=0
: 移除表中所有与value
相等的值。
127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "c" 5) "a" 6) "d" 7) "e" 8) "a" 9) "b"10) "a"11) "e"12) "c"13) "c"14) "c"15) "b"127.0.0.1:6379> lrem list -3 c #从列表尾部开始删除3个为 c 的元素(integer) 3127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "c" 5) "a" 6) "d" 7) "e" 8) "a" 9) "b"10) "a"11) "e"12) "b"127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "c" 5) "a" 6) "d" 7) "e" 8) "a" 9) "b"10) "a"11) "e"12) "b"127.0.0.1:6379> lrem list 2 a #从列表头部开始删除2个为 a 的元素(integer) 2127.0.0.1:6379> lrange list 0 -1 1) "b" 2) "c" 3) "c" 4) "d" 5) "e" 6) "a" 7) "b" 8) "a" 9) "e"10) "b"127.0.0.1:6379> lrange list 0 -1 1) "b" 2) "c" 3) "c" 4) "d" 5) "e" 6) "a" 7) "b" 8) "a" 9) "e"10) "b"127.0.0.1:6379> lrem list 0 b #删除列表中所有为 b 的元素(integer) 3127.0.0.1:6379> lrange list 0 -11) "c"2) "c"3) "d"4) "e"5) "a"6) "a"7) "e"
RPOPLPUSH source destination可用版本: >= 1.2.0时间复杂度: O(1)命令RPOPLPUSH在一个原子时间内,执行以下两个动作:
将列表
source
中的最后一个元素(尾元素)弹出,并返回给客户端。将
source
弹出的元素插入到列表destination
,作为destination
列表的的头元素。举个例子,你有两个列表
source
和destination
,source
列表有元素a,b,c
,destination
列表有元素x,y,z
,执行RPOPLPUSHsourcedestination
之后,source
列表包含元素a,b
,destination
列表包含元素c,x,y,z
,并且元素c
会被返回给客户端。如果
source
不存在,值nil
被返回,并且不执行其他动作。如果
source
和destination
相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)操作。
# source destination 为两个不同的列表127.0.0.1:6379> lrange list1 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> lrange list2 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> rpoplpush list1 list2"e"127.0.0.1:6379> lrange list1 0 -11) "a"2) "b"3) "c"4) "d"127.0.0.1:6379> lrange list2 0 -11) "e"2) "a"3) "b"4) "c"5) "d"6) "e"#source destination 为同一个列表127.0.0.1:6379> rpush list1 a b c d e(integer) 5127.0.0.1:6379> lrange list1 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> rpoplpush list1 list1"e"127.0.0.1:6379> lrange list1 0 -11) "e"2) "a"3) "b"4) "c"5) "d"#destination 列表不存在127.0.0.1:6379> lrange list2 0 -11) "e"2) "a"3) "b"4) "c"5) "d"6) "e"127.0.0.1:6379> EXISTS list3(integer) 0127.0.0.1:6379> rpoplpush list2 list3"e"127.0.0.1:6379> lrange list2 0 -11) "e"2) "a"3) "b"4) "c"5) "d"127.0.0.1:6379> lrange list3 0 -11) "e"
LTRIM key start stop可用版本: >= 1.0.0时间复杂度: O(N),N
为被移除的元素的数量。对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
举个例子,执行命令
LTRIMlist02
,表示只保留列表list
的前三个元素,其余元素全部删除。下标(index)参数
start
和stop
都以0
为底,也就是说,以0
表示列表的第一个元素,以1
表示列表的第二个元素,以此类推。你也可以使用负数下标,以
-1
表示列表的最后一个元素,-2
表示列表的倒数第二个元素,以此类推。当
key
不是列表类型时,返回一个错误。LTRIM命令通常和LPUSH key value [value …]命令或RPUSH key value [value …]命令配合使用,举个例子:
LPUSH log newest_logLTRIM log 0 99这个例子模拟了一个日志程序,每次将最新日志
newest_log
放到log
列表中,并且只保留最新的100
项。注意当这样使用LTRIM
命令时,时间复杂度是O(1),因为平均情况下,每次只有一个元素被移除。超出范围的下标
超出范围的下标值不会引起错误。
如果
start
下标比列表的最大下标end
(LLENlist
减去1
)还要大,或者start>stop
,LTRIM返回一个空列表(因为LTRIM已经将整个列表清空)。如果
stop
下标比end
下标还要大,Redis将stop
的值设置为end
127.0.0.1:6379> lrange list 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> ltrim list 1 3OK127.0.0.1:6379> lrange list 0 -11) "b"2) "c"3) "d"
#起始下标大于end127.0.0.1:6379> lrange list 0 -11) "b"2) "c"3) "d"4) "a"5) "b"6) "c"7) "d"8) "e"127.0.0.1:6379> ltrim list 8 10OK127.0.0.1:6379> lrange list 0 -1(empty list or set)#终止下标大于起始下标127.0.0.1:6379> lrange list 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> ltrim list 3 0OK127.0.0.1:6379> lrange list 0 -1(empty list or set)使用DEL命令直接删除key
127.0.0.1:6379> rpush list a b c d e(integer) 5127.0.0.1:6379> rpush list2 a b c d e(integer) 5127.0.0.1:6379> keys *1) "list"2) "list2"127.0.0.1:6379> del list(integer) 1127.0.0.1:6379> del lisst2(integer) 0127.0.0.1:6379>7、指定元素前后插入新元素
LINSERT key BEFORE|AFTER pivot value可用版本: >= 2.2.0时间复杂度: O(N),N
为寻找pivot
过程中经过的元素数量。将值
value
插入到列表key
当中,位于值pivot
之前或之后。当
pivot
不存在于列表key
时,不执行任何操作。当
key
不存在时,key
被视为空列表,不执行任何操作。
127.0.0.1:6379> rpush list a b c d e(integer) 5127.0.0.1:6379> LRANGE list 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> linsert list before d test(integer) 6127.0.0.1:6379> LRANGE list 0 -11) "a"2) "b"3) "c"4) "test"5) "d"6) "e"127.0.0.1:6379> rpush list1 a b c d e(integer) 5127.0.0.1:6379> LRANGE list1 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> linsert list after c test(integer) 7127.0.0.1:6379> LRANGE list1 0 -11) "a"2) "b"3) "c"4) "test"5) "d"6) "e"127.0.0.1:6379>三、集合 set
1、生成集合key集合Set 是字符String的无序集合,集合中的成员具有唯一性,可以在两个不同的集合中进行比较取值,常用于取值判断、统计、交集等场景,
集合特点:
无序性元素唯一性多集合处理
SADD key member [member …]可用版本: >= 1.0.0时间复杂度: O(N),N
是被添加的元素的数量。将一个或多个
member
元素加入到集合key
当中,已经存在于集合的member
元素将被忽略。假如
key
不存在,则创建一个只包含member
元素作成员的集合
127.0.0.1:6379> sadd set1 item1 item2 item3(integer) 3127.0.0.1:6379> type set1set2、集合追加元素
#追加集合内容是只能追加集合中不存在的元素,已存在的元素将被忽略127.0.0.1:6379> sadd set1 item3 item4 item5(integer) 23、查看集合元素
SMEMBERS key
可用版本: >= 1.0.0时间复杂度: O(N),N
为集合的基数。返回集合
key
中的所有成员。
127.0.0.1:6379> smembers set11) "item3"2) "item2"3) "item4"4) "item1"5) "item5"
SISMEMBER key member可用版本: >= 1.0.0时间复杂度: O(1)判断
member
元素是否集合key
的成员。返回值
如果
member
元素是集合的成员,返回1
。 如果member
元素不是集合的成员,或key
不存在,返回0
。
127.0.0.1:6379> smembers set11) "item2"2) "item5"3) "item1"4) "item3"5) "item4"#item2元素存在于列表set1127.0.0.1:6379> sismember set1 item2(integer) 1#item9元素不存在与列表set1127.0.0.1:6379> sismember set1 item9(integer) 0
SRANDMEMBER key [count]可用版本: >= 1.0.0时间复杂度: 只提供key
参数时为 O(1) 。如果提供了count
参数,那么为 O(N) ,N 为返回数组的元素个数。如果命令执行时,只提供了
key
参数,那么返回集合中的一个随机元素。从 Redis 2.6 版本开始,SRANDMEMBER命令接受可选的
count
参数:如果
count
为正数,且小于集合基数,那么命令返回一个包含count
个元素的数组,数组中的元素各不相同。如果count
大于等于集合基数,那么返回整个集合。如果
count
为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count
的绝对值。该操作和SPOP key相似,但SPOP key将随机元素从集合中移除并返回,而SRANDMEMBER则仅仅返回随机元素,而不对集合进行任何改动。
返回值
只提供
key
参数时,返回一个元素;如果集合为空,返回nil
。 如果提供了count
参数,那么返回一个数组;如果集合为空,返回空数组。
127.0.0.1:6379> smembers set11) "item2"2) "item5"3) "item1"4) "item3"5) "item4"#未输入count值,默认随机返回1个元素127.0.0.1:6379> srandmember set1"item4"#count<0,返回3个元素,允许出现重复值127.0.0.1:6379> srandmember set1 -31) "item4"2) "item3"3) "item4"#count>0,返回3个元素,结果允许出现重复值127.0.0.1:6379> srandmember set1 31) "item2"2) "item5"3) "item3"#count 大于列表中的元素个数,返回当前列表127.0.0.1:6379> srandmember set1 91) "item3"2) "item2"3) "item5"4) "item1"5) "item4"
SCARD key可用版本: >= 1.0.0时间复杂度: O(1)返回集合
key
的基数(集合中元素的数量)。返回值
集合的基数。 当
key
不存在时,返回0
127.0.0.1:6379> smembers set11) "item2"2) "item5"3) "item1"4) "item3"5) "item4"127.0.0.1:6379> smembers set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"6) "item4"127.0.0.1:6379> scard set1(integer) 5127.0.0.1:6379> scard set2(integer) 6
SSCAN cursor [MATCH pattern] [COUNT count]可用版本: >= 2.8.0时间复杂度:增量式迭代命令每次执行的复杂度为 O(1) , 对数据集进行一次完整迭代的复杂度为 O(N) , 其中 N 为数据集中的元素数量。
SCAN
命令及其相关的SSCAN
命令、HSCAN
命令和ZSCAN
命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements)
127.0.0.1:6379> smembers set1 1) "item5" 2) "item1" 3) "item231" 4) "item132" 5) "item3" 6) "item13" 7) "item4" 8) "item2" 9) "item121"10) "item81"#使用sscan筛选集合内元素127.0.0.1:6379> sscan set1 0 match item??1) "7"2) 1) "item81" 2) "item13"127.0.0.1:6379> sscan set1 0 match item???1) "7"2) 1) "item231" 2) "item132" 3) "item121"127.0.0.1:6379> sscan set1 0 match item??11) "7"2) 1) "item231" 2) "item121"127.0.0.1:6379> sscan set1 0 match item*11) "7"2) 1) "item231" 2) "item121" 3) "item81" 4) "item1"4、删除集合中的元素
SREM key member [member …]
可用版本: >= 1.0.0时间复杂度: O(N),N
为给定member
元素的数量。移除集合
key
中的一个或多个member
元素,不存在的member
元素会被忽略。
127.0.0.1:6379> smembers set11) "item3"2) "item2"3) "item4"4) "item1"5) "item5"127.0.0.1:6379> srem set1 item1 item2(integer) 2127.0.0.1:6379> smembers set11) "item5"2) "item3"3) "item4"#删除不存在的元素,错误的元素会被忽略127.0.0.1:6379> srem set1 item3 item6 item7(integer) 1127.0.0.1:6379> smembers set11) "item5"2) "item4"
SPOP key可用版本: >= 1.0.0时间复杂度: O(1)移除并返回集合中的一个随机元素。
如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用SRANDMEMBER key [count]命令。
返回值
被移除的随机元素。 当
key
不存在或key
是空集时,返回nil
。
127.0.0.1:6379> smembers set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"6) "item4"127.0.0.1:6379> spop set2"item4"127.0.0.1:6379> smembers set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"127.0.0.1:6379> spop set2"item6"127.0.0.1:6379> smembers set21) "item2"2) "item9"3) "item7"4) "item1"
SMOVE source destination member可用版本: >= 1.0.0时间复杂度: O(1)将
member
元素从source
集合移动到destination
集合。SMOVE是原子性操作。
如果
source
集合不存在或不包含指定的member
元素,则SMOVE命令不执行任何操作,仅返回0
。否则,member
元素从source
集合中被移除,并添加到destination
集合中去。当
destination
集合已经包含member
元素时,SMOVE命令只是简单地将source
集合中的member
元素删除。当
source
或destination
不是集合类型时,返回一个错误。返回值
如果
member
元素被成功移除,返回1
。 如果member
元素不是source
集合的成员,并且没有任何操作对destination
集合执行,那么返回0
127.0.0.1:6379> smembers set11) "item3"2) "item2"3) "item4"4) "item1"5) "item5"127.0.0.1:6379> smembers set21) "item4"2) "item1"3) "item9"4) "item2"5) "item7"6) "item6"#destination不存在时,自动创建set3集合,并将item5添加至set3127.0.0.1:6379> smove set1 set3 item5(integer) 1127.0.0.1:6379> smembers set11) "item4"2) "item1"3) "item2"4) "item3"127.0.0.1:6379> smembers set31) "item5"#item6不存在于source127.0.0.1:6379> smove set1 set2 item6(integer) 0127.0.0.1:6379> smembers set11) "item1"2) "item2"3) "item5"4) "item3"5) "item4"127.0.0.1:6379> smembers set21) "item4"2) "item1"3) "item9"4) "item2"5) "item7"6) "item6"#将item5从set1 移动至 set2127.0.0.1:6379> smove set1 set2 item5(integer) 1127.0.0.1:6379> smembers set11) "item2"2) "item1"3) "item3"4) "item4"127.0.0.1:6379> smembers set21) "item1"2) "item9"3) "item2"4) "item5"5) "item7"6) "item6"7) "item4"#item1 同时存在于set1 set2时,仅删除 set1 中的 item1127.0.0.1:6379> smembers set11) "item2"2) "item5"3) "item1"4) "item3"5) "item4"127.0.0.1:6379> smembers set21) "item9"2) "item2"3) "item1"4) "item7"5) "item6"6) "item4"127.0.0.1:6379> smove set1 set2 item1(integer) 1127.0.0.1:6379> smembers set11) "item2"2) "item5"3) "item3"4) "item4"127.0.0.1:6379> smembers set21) "item9"2) "item2"3) "item1"4) "item7"5) "item6"6) "item4"5、获取集合交集
SINTER key [key …]可用版本: >= 1.0.0时间复杂度: O(N * M),N
为给定集合当中基数最小的集合,M
为给定集合的个数。返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的
key
被视为空集。当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
127.0.0.1:6379> SMEMBERS set11) "item3"2) "item2"3) "item4"4) "item1"5) "item5"127.0.0.1:6379> SMEMBERS set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"6) "item4"127.0.0.1:6379> sinter set1 set21) "item2"2) "item4"3) "item1"
SINTERSTORE destination key [key …]可用版本: >= 1.0.0时间复杂度: O(N * M),N
为给定集合当中基数最小的集合,M
为给定集合的个数。这个命令类似于SINTER key [key …]命令,但它将结果保存到
destination
集合,而不是简单地返回结果集。如果
destination
集合已经存在,则将其覆盖。
destination
可以是key
本身。
127.0.0.1:6379> SMEMBERS set11) "item3"2) "item2"3) "item4"4) "item1"5) "item5"127.0.0.1:6379> SMEMBERS set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"6) "item4"#将set1 与 set2 的交集保存到 sinter_set127.0.0.1:6379> sinterstore sinter_set set1 set2(integer) 3127.0.0.1:6379> SMEMBERS sinter_set1) "item2"2) "item4"3) "item1"6、获取集合并集
SUNION key [key …]可用版本: >= 1.0.0时间复杂度: O(N),N
是所有给定集合的成员数量之和。返回一个集合的全部成员,该集合是所有给定集合的并集。
不存在的
key
被视为空集。
127.0.0.1:6379> SMEMBERS set11) "item3"2) "item2"3) "item4"4) "item1"5) "item5"127.0.0.1:6379> SMEMBERS set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"6) "item4"127.0.0.1:6379> sunion set1 set21) "item9"2) "item2"3) "item5"4) "item7"5) "item1"6) "item6"7) "item3"8) "item4"
SUNIONSTORE destination key [key …]可用版本: >= 1.0.0时间复杂度: O(N),N
是所有给定集合的成员数量之和。这个命令类似于SUNION key [key …]命令,但它将结果保存到
destination
集合,而不是简单地返回结果集。如果
destination
已经存在,则将其覆盖。
destination
可以是key
本身
127.0.0.1:6379> SMEMBERS set11) "item3"2) "item2"3) "item4"4) "item1"5) "item5"127.0.0.1:6379> SMEMBERS set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"6) "item4"127.0.0.1:6379> sunionstore sunion_set set1 set2(integer) 8127.0.0.1:6379> SMEMBERS sunion_set1) "item9"2) "item2"3) "item5"4) "item7"5) "item1"6) "item6"7) "item3"8) "item4"7、获取集合差集
SDIFF key [key …]可用版本: >= 1.0.0时间复杂度: O(N),N
是所有给定集合的成员数量之和。返回一个集合的全部成员,该集合是所有给定集合之间的差集。
不存在的
key
被视为空集。
127.0.0.1:6379> SMEMBERS set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"6) "item4"127.0.0.1:6379> SMEMBERS set11) "item3"2) "item2"3) "item4"4) "item1"5) "item5"#set1 与 set2 的差值127.0.0.1:6379> sdiff set1 set21) "item3"2) "item5"#set2 与 set1 的差值127.0.0.1:6379> sdiff set2 set11) "item6"2) "item9"3) "item7"
SDIFFSTORE destination key [key …]可用版本: >= 1.0.0时间复杂度: O(N),N
是所有给定集合的成员数量之和。这个命令的作用和SDIFF key [key …]类似,但它将结果保存到
destination
集合,而不是简单地返回结果集。如果
destination
集合已经存在,则将其覆盖。
destination
可以是key
本身
127.0.0.1:6379> SMEMBERS set11) "item2"2) "item5"3) "item1"4) "item3"5) "item4"127.0.0.1:6379> SMEMBERS set21) "item2"2) "item9"3) "item7"4) "item1"5) "item6"6) "item4"#set1 与 set2 的差值结果保存到 sdiff_set1127.0.0.1:6379> sdiffstore sdiff_set1 set1 set2(integer) 2127.0.0.1:6379> SMEMBERS sdiff_set11) "item3"2) "item5"#set2 与 set1 的差值结果保存到 sdiff_set2127.0.0.1:6379> sdiffstore sdiff_set2 set2 set1(integer) 3127.0.0.1:6379> SMEMBERS sdiff_set21) "item6"2) "item9"3) "item7"四、有序集合 sorted set
1、生成有序集合Sorted Set 有序集合也是一个由String字符类型元素组成的集合,且不允许内部元素value 重复出现。但是与Set集合不同的是,每个value元素都会关联一个double(双精度浮点型)类型的Score分散,Redis正是通过该Score分数为集合中的成员从小到大进行排序,有序集合成员value都是唯一的,但是Score分数允许出现重复情况。集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1),集合中最大成员数为 2^32-1,每个集合可容纳约40亿个成员,常用于实现排行榜或者浏览量统计等场景。
有序集合特点:
有序性元素唯一性每个元素通过score进行排序value不可以重复,score可以重复
ZADD key score member [[score member] [score member] …]可用版本: >= 1.2.0时间复杂度: O(M*log(N)),N
是有序集的基数,M
为成功添加的新成员的数量。将一个或多个
member
元素及其score
值加入到有序集key
当中。如果某个
member
已经是有序集的成员,那么更新这个member
的score
值,并通过重新插入这个member
元素,来保证该member
在正确的位置上。
score
值可以是整数值或双精度浮点数。如果
key
不存在,则创建一个空的有序集并执行ZADD操作。当
key
存在但不是有序集类型时,返回一个错误。
#添加一个元素到有序列表127.0.0.1:6379> zadd zset1 100 centos(integer) 1#添加多个元素包含已存在的元素到有序列表127.0.0.1:6379> zadd zset1 150 centos 160 ubuntu 170 alpine 900 windows10(integer) 3#添加多个新元素到有序列表127.0.0.1:6379> zadd zset1 90 windows7 198 windows11(integer) 2127.0.0.1:6379> type zset1zset2、有序集合实现排行榜
ZRANGE key start stop [WITHSCORES]可用版本: >= 1.2.0时间复杂度: O(log(N)+M),N
为有序集的基数,而M
为结果集的基数。返回有序集
key
中,指定区间内的成员。其中成员的位置按
score
值递增(从小到大)来排序。具有相同
score
值的成员按字典序(lexicographical order)来排列。下标参数
start
和stop
都以0
为底,也就是说,以0
表示有序集第一个成员,以1
表示有序集第二个成员,以此类推。 你也可以使用负数下标,以-1
表示最后一个成员,-2
表示倒数第二个成员,以此类推。超出范围的下标并不会引起错误。 比如说,当
start
的值比有序集的最大下标还要大,或是start>stop
时,ZRANGE命令只是简单地返回一个空列表。 另一方面,假如stop
参数的值比有序集的最大下标还要大,那么 Redis 将stop
当作最大下标来处理。可以通过使用
WITHSCORES
选项,来让成员和它的score
值一并返回,返回列表以value1,score1,...,valueN,scoreN
的格式表示。 客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。
#根据元素score值从小到大递增排序,并展示所有元素127.0.0.1:6379> zrange zset1 0 -11) "windows7"2) "centos"3) "ubuntu"4) "alpine"5) "windows11"6) "windows10"#根据元素score从小到大递增排序,并展示从第4位到最后一位的元素127.0.0.1:6379> zrange zset1 3 -11) "alpine"2) "windows11"3) "windows10"#根据元素score从小到大递减排序,并展示所有元素及score信息127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "centos" 4) "150" 5) "ubuntu" 6) "160" 7) "alpine" 8) "170" 9) "windows11"10) "198"11) "windows10"12) "900"#根据元素score从小到大递增排序,并展示从第4位到最后一位的元素及score信息127.0.0.1:6379> zrange zset1 3 -1 withscores1) "alpine"2) "170"3) "windows11"4) "198"5) "windows10"6) "900"
ZREVRANGE key start stop [WITHSCORES]可用版本: >= 1.2.0时间复杂度: O(log(N)+M),N
为有序集的基数,而M
为结果集的基数。返回有序集
key
中,指定区间内的成员。其中成员的位置按
score
值递减(从大到小)来排列。 具有相同score
值的成员按字典序的逆序(reverse lexicographical order)排列。
#根据score从大到小递减排序,并展示所有元素127.0.0.1:6379> zrevrange zset1 0 -11) "windows10"2) "windows11"3) "alpine"4) "ubuntu"5) "centos"6) "windows7"#根据score从大到小递减排序,并展示第2位到倒数第2位元素127.0.0.1:6379> zrevrange zset1 1 -21) "windows11"2) "alpine"3) "ubuntu"4) "centos"#根据score从大到小递减排序,并展示所有元素及score信息127.0.0.1:6379> zrevrange zset1 0 -1 withscores 1) "windows10" 2) "900" 3) "windows11" 4) "198" 5) "alpine" 6) "170" 7) "ubuntu" 8) "160" 9) "centos"10) "150"11) "windows7"12) "90"#根据score从大到小递减排序,并展示第2位到倒数第2位元素及score信息127.0.0.1:6379> zrevrange zset1 1 -2 withscores1) "windows11"2) "198"3) "alpine"4) "170"5) "ubuntu"6) "160"7) "centos"8) "150"
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]可用版本: >= 1.0.5时间复杂度: O(log(N)+M),N
为有序集的基数,M
为被结果集的基数。返回有序集
key
中,所有score
值介于min
和max
之间(包括等于min
或max
)的成员。有序集成员按score
值递增(从小到大)次序排列。具有相同
score
值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。可选的
LIMIT
参数指定返回结果的数量及区间(就像SQL中的SELECTLIMIToffset,count
),注意当offset
很大时,定位offset
的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。可选的
WITHSCORES
参数决定结果集是单单返回有序集的成员,还是将有序集成员及其score
值一起返回。 该选项自 Redis 2.0 版本起可用。区间及无限
min
和max
可以是-inf
和+inf
,这样一来,你就可以在不知道有序集的最低和最高score
值的情况下,使用ZRANGEBYSCORE这类命令。默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加
(
符号来使用可选的开区间(小于或大于)。举个例子:
ZRANGEBYSCORE zset (1 5返回所有符合条件
1
的成员,而 ZRANGEBYSCORE zset (5 (10则返回所有符合条件
5
的成员。
#将score分数在区间 150 >= score >=198 之间的元素按照从小到大递增次序排列并展示127.0.0.1:6379> zrangebyscore zset1 150 1981) "centos"2) "ubuntu"3) "alpine"4) "windows11"#将score分数在区间 150 > score >198 之间的元素及score信息按照从小到大递增次序排列并展示127.0.0.1:6379> zrangebyscore zset1 (150 (198 withscores1) "ubuntu"2) "160"3) "alpine"4) "170"
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]可用版本: >= 2.2.0时间复杂度: O(log(N)+M),N
为有序集的基数,M
为结果集的基数。返回有序集
key
中,score
值介于max
和min
之间(默认包括等于max
或min
)的所有的成员。有序集成员按score
值递减(从大到小)的次序排列。具有相同
score
值的成员按字典序的逆序(reverse lexicographical order)排列。除了成员按
score
值递减的次序排列这一点外,ZREVRANGEBYSCORE命令的其他方面和ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]命令一样。
#展示所有score分数低于900的元素,并按照从大到小递增排序127.0.0.1:6379> zrevrangebyscore zset1 (900 -inf1) "windows11"2) "alpine"3) "ubuntu"4) "centos"5) "windows7"#展示所有score分数不低于170的元素及score信息,按照从大到小递增排序127.0.0.1:6379> zrevrangebyscore zset1 +inf 170 withscores1) "windows10"2) "900"3) "windows11"4) "198"5) "alpine"6) "170"3、获取集合个数
ZCARD key可用版本: >= 1.2.0时间复杂度: O(1)返回有序集
key
的基数。
127.0.0.1:6379> zrange zset1 0 -11) "windows7"2) "centos"3) "ubuntu"4) "alpine"5) "windows11"6) "windows10"127.0.0.1:6379> zcard zset1(integer) 6
ZCOUNT key min max可用版本: >= 2.0.0时间复杂度: O(log(N)),N
为有序集的基数。返回有序集
key
中,score
值在min
和max
之间(默认包括score
值等于min
或max
)的成员的数量。
127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "centos" 4) "150" 5) "ubuntu" 6) "160" 7) "alpine" 8) "170" 9) "windows11"10) "198"11) "windows10"12) "900"127.0.0.1:6379> zcount zset1 100 900(integer) 5127.0.0.1:6379> zcount zset1 -inf +inf(integer) 64、返回某个数值的索引
ZRANK key member可用版本: >= 2.0.0时间复杂度: O(log(N))返回有序集
key
中成员member
的排名。其中有序集成员按score
值递增(从小到大)顺序排列。排名以
0
为底,也就是说,score
值最小的成员排名为0
127.0.0.1:6379> zrank zset1 windows11(integer) 4127.0.0.1:6379> zrank zset1 centos(integer) 1
ZREVRANK key member可用版本: >= 2.0.0时间复杂度: O(log(N))返回有序集
key
中成员member
的排名。其中有序集成员按score
值递减(从大到小)排序。排名以
0
为底,也就是说,score
值最大的成员排名为0
。
127.0.0.1:6379> zrevrank zset1 centos(integer) 4127.0.0.1:6379> zrevrank zset1 windows11(integer) 15、获取分数
ZSCORE key member可用版本: >= 1.2.0时间复杂度: O(1)返回有序集
key
中,成员member
的score
值。
127.0.0.1:6379> zscore zset1 centos"150"127.0.0.1:6379> zscore zset1 windows10"900"6、增加指定元素的分数值
ZINCRBY key increment member可用版本: >= 1.2.0时间复杂度: O(log(N))为有序集
key
的成员member
的score
值加上增量increment
。可以通过传递一个负数值
increment
,让score
减去相应的值,比如ZINCRBYkey-5member
,就是让member
的score
值减去5
。当
key
不存在,或member
不是key
的成员时,ZINCRBYkeyincrementmember
等同于ZADDkeyincrementmember
#对指定元素的分数加127.0.0.1:6379> zscore zset1 centos"300"127.0.0.1:6379> zincrby zset1 32 centos"332"127.0.0.1:6379> zscore zset1 centos"332"#对指定元素的分数减127.0.0.1:6379> zscore zset1 centos"332"127.0.0.1:6379> zincrby zset1 -87 centos"245"127.0.0.1:6379> zscore zset1 centos"245"#对不存在的元素进行score分数增127.0.0.1:6379> zrange zset1 0 -11) "windows7"2) "ubuntu"3) "alpine"4) "windows11"5) "centos"6) "windows10"127.0.0.1:6379> zincrby zset1 324 unix"324"127.0.0.1:6379> zrange zset1 0 -11) "windows7"2) "ubuntu"3) "alpine"4) "windows11"5) "centos"6) "unix"7) "windows10"7、删除元素
ZREM key member [member …]可用版本: >= 1.2.0时间复杂度: O(M*log(N)),N
为有序集的基数,M
为被成功移除的成员的数量。移除有序集
key
中的一个或多个成员,不存在的成员将被忽略。
127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "ubuntu" 4) "160" 5) "alpine" 6) "170" 7) "windows11" 8) "198" 9) "centos"10) "245"11) "unix"12) "324"13) "windows10"14) "900"127.0.0.1:6379> zrem zset1 unix ios(integer) 1127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "ubuntu" 4) "160" 5) "alpine" 6) "170" 7) "windows11" 8) "198" 9) "centos"10) "245"11) "windows10"12) "900"
ZREMRANGEBYRANK key start stop可用版本: >= 2.0.0时间复杂度: O(log(N)+M),N
为有序集的基数,而M
为被移除成员的数量。移除有序集
key
中,指定排名(rank)区间内的所有成员。区间分别以下标参数
start
和stop
指出,包含start
和stop
在内。下标参数
start
和stop
都以0
为底,也就是说,以0
表示有序集第一个成员,以1
表示有序集第二个成员,以此类推。 你也可以使用负数下标,以-1
表示最后一个成员,-2
表示倒数第二个成员,以此类推。
127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "ubuntu" 4) "160" 5) "alpine" 6) "170" 7) "windows11" 8) "198" 9) "centos"10) "245"11) "windows10"12) "900"127.0.0.1:6379> zremrangebyrank zset1 0 2(integer) 3127.0.0.1:6379> zrange zset1 0 -1 withscores1) "windows11"2) "198"3) "centos"4) "245"5) "windows10"6) "900"
ZREMRANGEBYSCORE key min max可用版本: >= 1.2.0时间复杂度: O(log(N)+M),N
为有序集的基数,而M
为被移除成员的数量。移除有序集
key
中,所有score
值介于min
和max
之间(包括等于min
或max
)的成员。
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "windows11"2) "198"3) "centos"4) "245"5) "windows10"6) "900"127.0.0.1:6379> zremrangebyscore zset1 -inf 300(integer) 2127.0.0.1:6379> zrange zset1 0 -1 withscores1) "windows10"2) "900"使用DEL删除有序集合key
127.0.0.1:6379> del zset1(integer) 1五、哈希 hash
1、生成hash keyHash哈希是一个字符类型String(field)与 值(value)的映射表,Redis中的每个哈希Hash可以存储 2^32-1 键值对,类似于字典作用,特别适用于存储对象场景。
HSET hash field value可用版本: >= 2.0.0时间复杂度: O(1)将哈希表
hash
中域field
的值设置为value
。如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行
HSET
操作。如果域
field
已经存在于哈希表中, 那么它的旧值将被新值value
覆盖。
127.0.0.1:6379> hset hash1 id 1 name janzen age 18 sex man number 159159(integer) 5127.0.0.1:6379> type hash1hash
HSETNX hash field value可用版本: >= 2.0.0时间复杂度: O(1)当且仅当域
field
尚未存在于哈希表的情况下, 将它的值设置为value
。如果给定域已经存在于哈希表当中, 那么命令将放弃执行设置操作。
如果哈希表
hash
不存在, 那么一个新的哈希表将被创建并执行HSETNX
命令。返回值
HSETNX
命令在设置成功时返回1
, 在给定域已经存在而放弃执行设置操作时返回0
127.0.0.1:6379> exists hash2(integer) 0#hash 不存在127.0.0.1:6379> hsetnx hash2 id 2(integer) 1#同时修改多个参数127.0.0.1:6379> hsetnx hash2 id 2 name qiu(error) ERR wrong number of arguments for "hsetnx" command#field 不存在127.0.0.1:6379> hsetnx hash2 name qiu(integer) 1#field已存在127.0.0.1:6379> hsetnx hash2 id 3(integer) 0127.0.0.1:6379>2、获取hash key 对应字段的值
HGET hash field可用版本: >= 2.0.0时间复杂度: O(1)返回哈希表中给定域的值。
127.0.0.1:6379> hget hash1 id"1"127.0.0.1:6379> hget hash1 name"janzen"127.0.0.1:6379> hget hash1 age"18"127.0.0.1:6379> hget hash2 id"2"127.0.0.1:6379> hget hash2 name"qiu"3、删除一个hash key的对应字段
HDEL key field [field …]删除哈希表
key
中的一个或多个指定域,不存在的域将被忽略。
127.0.0.1:6379> hdel hash2 id(integer) 1127.0.0.1:6379> hdel hash2 id name(integer) 14、批量设置hash key 的多个filed和value
HMSET key field value [field value …]同时将多个
field-value
(域-值)对设置到哈希表key
中。此命令会覆盖哈希表中已存在的域。
如果
key
不存在,一个空哈希表被创建并执行HMSET操作
127.0.0.1:6379> hmset hash2 id 2 name qiu age 20 sex man number 970203OK5、获取hash中指定字段的值
HMGET key field [field …]返回哈希表
key
中,一个或多个给定域的值。如果给定的域不存在于哈希表,那么返回一个
nil
值。因为不存在的
key
被当作一个空哈希表来处理,所以对一个不存在的key
进行HMGET操作将返回一个只带有nil
值的表。
127.0.0.1:6379> hmget hash2 id name number1) "2"2) "qiu"3) "970203"127.0.0.1:6379> hmget hash1 id name number1) "1"2) "janzen"3) "159159"6、获取hash中的所有字段名field
HKEYS key返回哈希表
key
中的所有field
127.0.0.1:6379> hkeys hash11) "id"2) "name"3) "age"4) "sex"5) "number"127.0.0.1:6379> hkeys hash21) "id"2) "name"3) "age"4) "sex"5) "number"7、获取指定hash所有的value
HVALS key返回哈希表
key
中所有field的值。
127.0.0.1:6379> hvals hash11) "1"2) "janzen"3) "18"4) "man"5) "159159"127.0.0.1:6379> hvals hash21) "2"2) "qiu"3) "20"4) "man"5) "970203"8、获取指定hash的所有field和value值
HGETALL key返回哈希表
key
中,所有的域和值。
127.0.0.1:6379> hgetall hash1 1) "id" 2) "1" 3) "name" 4) "janzen" 5) "age" 6) "18" 7) "sex" 8) "man" 9) "number"10) "159159"127.0.0.1:6379> hgetall hash2 1) "id" 2) "2" 3) "name" 4) "qiu" 5) "age" 6) "20" 7) "sex" 8) "man" 9) "number"10) "970203"9、删除hash
HDEL key field [field …]删除哈希表
key
中的一个或多个指定域,不存在的域将被忽略。
127.0.0.1:6379> hgetall hash2 1) "id" 2) "2" 3) "name" 4) "qiu" 5) "age" 6) "20" 7) "sex" 8) "man" 9) "number"10) "970203"127.0.0.1:6379> hdel hash2 id(integer) 1127.0.0.1:6379> hgetall hash21) "name"2) "qiu"3) "age"4) "20"5) "sex"6) "man"7) "number"8) "970203"127.0.0.1:6379> hdel hash2 name age addr(integer) 2127.0.0.1:6379> hgetall hash21) "sex"2) "man"3) "number"4) "970203"使用DEL删除hash key
127.0.0.1:6379> hgetall hash21) "sex"2) "man"3) "number"4) "970203"127.0.0.1:6379> del hash2(integer) 1127.0.0.1:6379> hgetall hash2(empty list or set)127.0.0.1:6379> exists hash2(integer) 0127.0.0.1:6379>
关键词:
-
河北大数据产业发展风生水起 基础设施日臻完善2022-03-18
-
河北沧州:学生“暖心小纸条”致敬“最美逆行者”2022-03-18
-
中央气象台发布暴雪蓝色预警 河北北部部分地区有大雪2022-03-18
-
巢湖:男子饮酒过量醉倒路边 交通执法人员及时发现并救助2022-03-18