最后更新于 2024-07-21 23:48:36 基本数据类型包括字符串(string)类型、哈希(hash)类型、列表(list)类型、集合类型(set)和有序集合(sorted set或zset)类型
针对字符串的命令 读写字符串的set和get命令 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
set key value [ NX| XX] [ GET] [ EX seconds| PX milliseconds| EXAT unix-time-seconds| PXAT unix-time-milliseconds| KEEPTTL]
# key和value分别是待设置字符串的键和值,value需要字符串类型。如果key对应的值已经存在,则再次set时会覆盖旧值。
# nx (if not exist): 如果不存在时再执行
# xx :如果存在则执行
# get: 获取旧值,如果旧值不存在则返回nil
# ex: 过期时间,单位为秒。必须是整数,不能是表达式。
# px: 过期时间,单位为微秒。必须是整数,不能是表达式。
# exat: 在某个unix秒的时间点过期
# pxat: 在某个unix毫秒的时间点过期
# keepttl: 保留key之前旧值的生存时间。
# set之后,可以使用get获取key对应的值。
127.0.0.1:6379> set key val ex 100
OK
127.0.0.1:6379> ttl key
( integer) 96
127.0.0.1:6379> set key val1 keepttl
OK
127.0.0.1:6379> get key
"val1"
127.0.0.1:6379> ttl key
( integer) 78
127.0.0.1:6379>
设置和获取多个字符串的命令 1
2
3
4
5
6
7
8
9
10
11
mset key value [ key value ...]
mget key [ key ...]
# mset mget不能指定ex,px(ex,px不报错但不生效),nx,xx等参数(报错),
127.0.0.1:6379> mset key1 val1 key2 value2 k3 v3
OK
127.0.0.1:6379> mget key1 key2 k3
1) "val1"
2) "value2"
3) "v3"
对整数类型的值进行增量和减量操作 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 增量和减量操作,都需要key对应的值为整数,否则报错。
incr key
# 对key对应的值+1,如果key不存在,则默认key对应的值为0
# incrby key increment
# 对key对应的值+increment
decr key
decrby key increment
#减量操作
127.0.0.1:6379> incr key
( integer) 1
127.0.0.1:6379> incrby key 9
( integer) 10
127.0.0.1:6379> decr key
( integer) 9
127.0.0.1:6379> decrby key 2
( integer) 7
127.0.0.1:6379>
getset命令获取旧值设置新值 1
2
3
4
5
6
7
8
9
getset key value
# 如果key不存在,则返回nil,并设置新值;如果key存在,则返回旧值,并设置新值
127.0.0.1:6379> get key
"1"
127.0.0.1:6379> getset key 3
"1"
127.0.0.1:6379> get key
"3"
针对字符串的其他操作 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
getrange key start end
# 获取key对应值的子字符串,start和end表示起始位置,start从0开始,end也可以从右向左,最右边的索引为-1
127.0.0.1:6379> set key 029-12345678
OK
127.0.0.1:6379> getrange key 4 11
"12345678"
127.0.0.1:6379> getrange key 4 -1
"12345678"
setrange key offset value
# 相当于字符串的替换操作,从offset位置开始,把值替换为value
127.0.0.1:6379> setrange key 4 87654321
( integer) 12
127.0.0.1:6379> get key
"029-87654321"
strlen key
# 统计字符串长度的命令
append key value
# 将value追加到原值的末尾
127.0.0.1:6379> append key ***
( integer) 15
127.0.0.1:6379> get key
"029-87654321***"
针对哈希类型变量的命令 设置并获取哈希值 1
2
3
4
5
6
7
8
9
10
11
hset key field value [ field value ...]
# field 和value可以理解为对象的属性和属性值,返回值为属性的个数
hget key field
# hget必须指定key和字段名称
127.0.0.1:6379> hset hkey name farb sex male
( integer) 2
127.0.0.1:6379> hget hkey name
"farb"
127.0.0.1:6379>
hsetnx命令 1
2
3
4
5
6
7
8
9
10
11
12
13
14
hsetnx key field value
# 当key不存在或者key和field对应value不存在时,设置value,后面只能跟一对key和value
127.0.0.1:6379> hget hkey name
"farb"
127.0.0.1:6379> hsetnx hkey name jack
( integer) 0
127.0.0.1:6379> hsetnx hkey age 18
( integer) 1
127.0.0.1:6379>
127.0.0.1:6379> hsetnx hNotExistKey name Alice
( integer) 1
127.0.0.1:6379> hget hNotExistKey name
"Alice"
key的相关操作 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
hkeys key
# 查看哈希类型的所有字段field,找不到的话就返回empty array信息
127.0.0.1:6379> hkeys hkey
1) "name"
2) "sex"
3) "age"
hvals key
# 查看所有field对应的值,找不到的话就返回empty array信息
127.0.0.1:6379> hvals hkey
1) "farb"
2) "male"
3) "18"
hgetall key
# 以键值对的形式查看key对应的哈希类型数据,找不到的话就返回empty array信息
127.0.0.1:6379> hgetall hkey
1) "name"
2) "farb"
3) "sex"
4) "male"
5) "age"
6) "18"
hexists命令判断值是否存在 1
2
3
4
5
6
7
8
9
hexists key field
# 判断key和field对应的value是否存在,key不存在也返回0
127.0.0.1:6379> hexists hkey name
( integer) 1
127.0.0.1:6379> hexists hkey height
( integer) 0
127.0.0.1:6379> hexists nonExists name
( integer) 0
哈希类型数据的删除操作 1
2
3
4
5
6
7
8
hdel key field [ field ...]
# 删除key指定的field数据,可以传入多个字段,返回值删除的字段数
127.0.0.1:6379> hdel hkey sex age
( integer) 2
127.0.0.1:6379> hgetall hkey
1) "name"
2) "farb"
针对列表类型变量的命令 读写列表的命令 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
lpush key element [ element ...]
# 将元素依次插入到名为key的列表左侧
lindex key index
# 从键名为key的列表中从左侧读取第index个元素,下标从0开始
127.0.0.1:6379> lpush mylist 1 2 3 4
( integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> lindex mylist 1
"3"
rpush key element [ element ...]
# 将元素依次插入到名为key的列表右侧
127.0.0.1:6379> rpush mylist 2 3 4
( integer) 7
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "2"
6) "3"
7) "4"
127.0.0.1:6379>
lpushx 和rpushx 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
lpushx key element [ element ...]
# 当key存在时,在key对应的列表左侧添加元素
127.0.0.1:6379> lpushx mylist 5 6
( integer) 9
127.0.0.1:6379> lrange mylist 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "2"
8) "3"
9) "4"
rpushx key element [ element ...]
# 当key存在时,在key对应的列表右侧添加元素
127.0.0.1:6379> rpushx mylist 5 6
( integer) 11
127.0.0.1:6379> lrange mylist 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "2"
8) "3"
9) "4"
10) "5"
11) "6"
用list模拟堆栈和队列 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 栈:后进先出,所以可以使用lpush、lpop命令或者rpush、rpop命令模拟栈
127.0.0.1:6379> lpush stack1 1 2
( integer) 2
127.0.0.1:6379> lrange stack1 0 -1
1) "2"
2) "1"
127.0.0.1:6379> lpop stack1
"2"
# 队列:先进先出,所以可以使用lpush、rpop或者rpush、lpop命令来模拟队列
127.0.0.1:6379> rpush queue 1 2
( integer) 2
127.0.0.1:6379> lpop queue
"1"
127.0.0.1:6379>
用lrange获取指定区间内的数据 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
lrange key start stop
# key为list键名,start为起始位置,从0开始,stop为结束位置,最后一个元素可以为-1
127.0.0.1:6379> lrange mylist 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "2"
8) "3"
9) "4"
10) "5"
11) "6"
127.0.0.1:6379> lrange mylist 1 3
1) "5"
2) "4"
3) "3"
127.0.0.1:6379>
用lset修改列表数据 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
lset key index element
# 将名为key的列表的第index个元素修改为element
127.0.0.1:6379> lset mylist 0 7
OK
127.0.0.1:6379> lset mylist -1 7
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "7"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "2"
8) "3"
9) "4"
10) "5"
11) "7"
删除列表数据 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
rpop key [ count]
# 从右边弹出count个元素
lpop key [ count]
# 从左边弹出count个元素
lrem key count element
# 当count=0时,删除该列表中所有值是element的元素;
# 当count>0时,从左到右删除数量为count个、值是element的元素;
# 当count<0时,从右往左删除数量为count个、值是element的元素;
127.0.0.1:6379> lpop mylist
"7"
127.0.0.1:6379> rpop mylist
"7"
127.0.0.1:6379> lrem mylist 0 5
( integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "2"
6) "3"
7) "4"
针对集合的命令 读写集合 1
2
3
4
5
6
7
8
9
10
11
sadd key member [ member ...]
# 给名为key的集合中添加元素,元素会自动去重
smembers key
# 读取集合key中的所有元素
127.0.0.1:6379> sadd myset 1 2 2 3
( integer) 3
127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"
列表和集合类数据的区别 列表存储数据时具有有序性,要么从左侧push,要么从右侧push。而集合不具有有序性。 列表存储的数据可以存在重复元素,而集合会自动去重。 用sismember判断元素是否存在 1
2
3
4
5
6
7
sismember key member
# 判断集合key中是否存在member,存在返回1,不存在返回0
127.0.0.1:6379> sismember myset 2
( integer) 1
127.0.0.1:6379> sismember myset 4
( integer) 0
获取集合的交集、并集和差集 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sinter key [ key ...]
# 获取多个key对应集合的交集
127.0.0.1:6379> sadd myset2 2 3 4
( integer) 3
127.0.0.1:6379> sinter myset myset2
1) "2"
2) "3"
sunion key [ key ...]
# 获取多个集合对应的并集
127.0.0.1:6379> sunion myset myset2
1) "1"
2) "2"
3) "3"
4) "4"
sdiff key [ key ...]
# 获取多个key对应的差集
127.0.0.1:6379> sdiff myset myset2
1) "1"
127.0.0.1:6379> sdiff myset2 myset
1) "4"
用srem命令删除集合数据 1
2
3
4
5
srem key member [ member ...]
# 删除集合key中的元素,并返回删除的元素个数
127.0.0.1:6379> srem myset 1
( integer) 1
有序集合的命令 有序集合的读写 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
zadd key [ NX| XX] [ GT| LT] [ CH] [ INCR] score member [ score member ...]
# 给名为key的集合添加分数和元素
# NX 有序集合中的元素不存在时才添加
# XX 有序集合中的元素存在时添加
# GT 当元素存在,且当分数大于旧分数时执行,不阻止添加元素。
# LT 当元素存在,且当分数小于旧分数时执行,不阻止添加元素。
# CH 修改返回的值为添加的元素数量+修改分数的元素数量(分数相同的时不更新)
# INCR 给分数添加,使用此参数时,只能添加一个元素
# score 分数或权重
# member 元素
zrange key start stop [ BYSCORE| BYLEX] [ REV] [ LIMIT offset count] [ WITHSCORES]
# 读取名为key的有序集合中score排名区间在start到stop之间的数据
# ByScore 按分数范围查询
# Rev 是否反序
# Limit offset count 和mysql的分页查询一样
# withScores 返回分数
127.0.0.1:6379> zadd sortedSet 6 farb
( integer) 1
127.0.0.1:6379> zadd sortedSet GT 5 farb
( integer) 0
127.0.0.1:6379> zadd sortedSet GT 8 farb
( integer) 0
127.0.0.1:6379> zrange sortedSet -1 100
1) "farb"
127.0.0.1:6379> zrange sortedSet -1 100 WITHScores
1) "farb"
2) "8"
127.0.0.1:6379> zadd sortedSet GT 2 jack 3 lucy
( integer) 2
127.0.0.1:6379> zrange sortedSet 0 100 REV WITHSCORES
1) "farb"
2) "8"
3) "lucy"
4) "3"
5) "jack"
6) "2"
127.0.0.1:6379> zrange sortedSet 0 100 byscore
1) "jack"
2) "lucy"
3) "farb"
127.0.0.1:6379> zrange sortedSet 0 100 byscore withScores
1) "jack"
2) "2"
3) "lucy"
4) "3"
5) "farb"
6) "8"
zincrby修改元素的分数 1
2
3
4
5
zincrby key increment member
# 给名为key的有序集合中的member元素增加分数increment,返回值是最终分数
127.0.0.1:6379> zincrby sortedSet 10 farb
"18"
zscore 获取指定元素的分数 1
2
3
4
5
zscore key member
# 只能返回一个元素的分数,否则报错
127.0.0.1:6379> zscore sortedSet farb
"18"
zrank查看有序集合中的排名 1
2
3
4
5
6
7
8
9
10
11
12
13
14
zrank key member [ WITHSCORE]
# 正序排名,索引从0开始
zrevrank key member [ WITHSCORE]
# 倒序排名
127.0.0.1:6379> zrank sortedSet jack withScore
1) ( integer) 0
2) "2"
127.0.0.1:6379> zrank sortedSet farb withScore
1) ( integer) 2
2) "18"
127.0.0.1:6379> zrevrank sortedSet farb WithScore
1) ( integer) 0
2) "18"
删除有序集合中的值 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
zrem key member [ member ...]
# 一次允许删除多个元素
127.0.0.1:6379> zrem sortedSet jack lucy
( integer) 2
127.0.0.1:6379> zrange sortedSet 0 100
1) "farb"
zremrangebyrank key start stop
# 删除排名在start和stop之间的元素
127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four
( integer) 4
127.0.0.1:6379> zrange myzset 1 4
1) "two"
2) "three"
3) "four"
127.0.0.1:6379> zrange myzset 0 4
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> zrange myzset 0 3
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> zremrangebyrank myzset 0 2
( integer) 3
127.0.0.1:6379> zrange myzset 0 3
1) "four"
zremrangebyscore key min max
# 删除分数在min和max之间的元素
127.0.0.1:6379> zrange myzset 0 100 withScores
1) "one"
2) "1.5"
3) "two"
4) "2.6"
5) "three"
6) "3.7"
7) "four"
8) "4.8"
127.0.0.1:6379> zremrangebyscore myzset 2 4
( integer) 2
127.0.0.1:6379> zrange myzset 0 100 withScores
1) "one"
2) "1.5"
3) "four"
4) "4.8"
Licensed under CC BY-NC-SA 4.0 如果觉得我的博客能帮助到你,欢迎点击右侧的赞助进行投喂。如有技术咨询,也可以加本人好友。