REDIS Sting
REDIS Sting
AlexREDIS Sting
APPEND
- 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
- 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
1
2
3
4
5
6
7
8
9
10127.0.0.1:6379> EXISTS myphone
(integer) 0
# 对不存在的key进行append 等同直接set
127.0.0.1:6379> APPEND myphone "nokia"
(integer) 5
#对存在的keyappend 直接追加后边
127.0.0.1:6379> APPEND myphone " - 1110"
(integer) 12
127.0.0.1:6379> GET myphone
"nokia - 1110"
APPEND timeseries
- APPEND 可以为一系列定长(fixed-size)数据(sample)提供一种紧凑的表示方式,通常称之为时间序列。
APPEND timeseries "fixed-size sample"
- 可以考虑使用 UNIX 时间戳作为时间序列的键名,这样一来,可以避免单个 key 因为保存过大的时间序列而占用大量内存,另一方面,也可以节省下大量命名空间。
1
2
3
4
5
6
7
8127.0.0.1:6379> APPEND ts "0043"
(integer) 4
127.0.0.1:6379> APPEND ts "0035"
(integer) 8
127.0.0.1:6379> GETRANGE ts 0 3
"0043"
127.0.0.1:6379> GETRANGE ts 4 7
"0035"
DECR
- 将 key 中储存的数字值减一
- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
- 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
- 值限制在 64 位(bit)有符号数字表示之内。
1 | #对存在的数字值 key 进行 DECR |
DECRBY
- 将 key 所储存的值减去减量 decrement 。
1
2
3
4
5
6
7
8
9127.0.0.1:6379> SET count 100
OK
127.0.0.1:6379> DECRBY count 20
(integer) 80
# 不存在的key
127.0.0.1:6379> EXISTS pages
(integer) 0
127.0.0.1:6379> DECRBY pages 10
(integer) -10
GET
- 返回key所关联的字符串值
GETBIT
- 对key所存储的字符串值,获取指定偏移量上的位(bit)
- 当 offset 比字符串值的长度大,或者 key 不存在时,返回 0
1
2
3
4
5
6
7
8
9
10对不存在的 key 或者不存在的 offset 进行 GETBIT, 返回 0
127.0.0.1:6379> EXISTS bit
(integer) 0
127.0.0.1:6379> GETBIT bit 10086
(integer) 0
# 对已存在的 offset 进行 GETBIT
127.0.0.1:6379> SETBIT bit 10086 1
(integer) 0
127.0.0.1:6379> GETBIT bit 10086
(integer) 1
GETSET
- 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
- 当 key 存在但不是字符串类型时,返回一个错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17127.0.0.1:6379> GETSET db mongodb
(nil)
127.0.0.1:6379> GET db
"mongodb"
127.0.0.1:6379> GETSET db redis
"mongodb"
127.0.0.1:6379> GET db
"redis"
127.0.0.1:6379>
#
127.0.0.1:6379> INCR mycount
(integer) 1
127.0.0.1:6379> GETSET mycount 0
"1"
127.0.0.1:6379> GET mycount
"0"
INCR
- 将key中存储的数字增加一
1
2
3
4
5
6
7"0"
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> incr age
(integer) 21
127.0.0.1:6379> get age
"21"
INCRBY
- 将key所存储的值增加增量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#key 存在且是数字
127.0.0.1:6379> SET rank 50
OK
127.0.0.1:6379> INCRBY rank 20
(integer) 70
#key不存在
127.0.0.1:6379> GET rank
"70"
127.0.0.1:6379> EXISTS counter
(integer) 0
127.0.0.1:6379> INCRBY counter 30
(integer) 30
127.0.0.1:6379> GET counter
"30"
#eky存在不是数字
127.0.0.1:6379> SET book "long long ago..."
OK
127.0.0.1:6379> INCRBY book 200
(error) ERR value is not an integer or out of range
INCRBYFLOAT
- 为 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
26# 值和增量都不是指数符号
127.0.0.1:6379> SET mykey 10.50
OK
127.0.0.1:6379> INCRBYFLOAT mykey 0.1
"10.6"
# 值和增量都是指数符号
127.0.0.1:6379> SET mykey 314e-2
OK
127.0.0.1:6379> GET mykey
"314e-2"
127.0.0.1:6379> INCRBYFLOAT mykey 0
"3.14"
# 可以对整数类型执行
127.0.0.1:6379> SET mykey 3
OK
127.0.0.1:6379> INCRBYFLOAT mykey 1.1
"4.1"
# 后跟的 0 会被移除
127.0.0.1:6379> SET mykey 3.0
OK
127.0.0.1:6379> GET mykey
"3.0"
127.0.0.1:6379> INCRBYFLOAT mykey 1.000000000000000000000
"4"
127.0.0.1:6379> GET mykey
"4"
MGET
- 返回所有(一个或多个)给定key的值
- 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。
1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379> SET redis redis.com
OK
127.0.0.1:6379> SET mongodb mongodb.org
OK
127.0.0.1:6379> MGET redis mongodb
1) "redis.com"
2) "mongodb.org"
127.0.0.1:6379> MGET redis mongodb mysql # 不存在的 mysql 返回 nil
1) "redis.com"
2) "mongodb.org"
3) (nil)
MSET
- 同时设置一个或多个key-value对
1
2
3
4
5
6127.0.0.1:6379> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
OK
127.0.0.1:6379> MGET date time weather
1) "2012.3.30"
2) "11:00 a.m."
3) "sunny"
MSETNX
- 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
- 即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。
1
2
3
4
5
6127.0.0.1:6379> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
(integer) 1
127.0.0.1:6379> MGET rmdbs nosql key-value-store
1) "MySQL"
2) "MongoDB"
3) "redis"
PSETEX
- 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
1
2
3
4
5
6127.0.0.1:6379> PSETEX mykey 100000 "Hello"
OK
127.0.0.1:6379> PTTL mykey
(integer) 98648
127.0.0.1:6379> GET mykey
"Hello"
SET
- 将字符串值value关联到key
- 如果key存在,覆盖操作,无视类型
- 对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112# 对不存在的键进行设置
redis 127.0.0.1:6379> SET key "value"
OK
redis 127.0.0.1:6379> GET key
"value"
# 对已存在的键进行设置
redis 127.0.0.1:6379> SET key "new-value"
OK
redis 127.0.0.1:6379> GET key
"new-value"
# 使用 EX 选项
redis 127.0.0.1:6379> SET key-with-expire-time "hello" EX 10086
OK
redis 127.0.0.1:6379> GET key-with-expire-time
"hello"
redis 127.0.0.1:6379> TTL key-with-expire-time
(integer) 10069
# 使用 PX 选项
redis 127.0.0.1:6379> SET key-with-pexpire-time "moto" PX 123321
OK
redis 127.0.0.1:6379> GET key-with-pexpire-time
"moto"
redis 127.0.0.1:6379> PTTL key-with-pexpire-time
(integer) 111939
# 使用 NX 选项
redis 127.0.0.1:6379> SET not-exists-key "value" NX
OK # 键不存在,设置成功
redis 127.0.0.1:6379> GET not-exists-key
"value"
redis 127.0.0.1:6379> SET not-exists-key "new-value" NX
(nil) # 键已经存在,设置失败
redis 127.0.0.1:6379> GEt not-exists-key
"value" # 维持原值不变
# 使用 XX 选项
redis 127.0.0.1:6379> EXISTS exists-key
(integer) 0
redis 127.0.0.1:6379> SET exists-key "value" XX
(nil) # 因为键不存在,设置失败
redis 127.0.0.1:6379> SET exists-key "value"
OK # 先给键设置一个值
redis 127.0.0.1:6379> SET exists-key "new-value" XX
OK # 设置新值成功
redis 127.0.0.1:6379> GET exists-key
"new-value"
# NX 或 XX 可以和 EX 或者 PX 组合使用
redis 127.0.0.1:6379> SET key-with-expire-and-NX "hello" EX 10086 NX
OK
redis 127.0.0.1:6379> GET key-with-expire-and-NX
"hello"
redis 127.0.0.1:6379> TTL key-with-expire-and-NX
(integer) 10063
redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "old value"
OK
redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "new value" PX 123321
OK
redis 127.0.0.1:6379> GET key-with-pexpire-and-XX
"new value"
redis 127.0.0.1:6379> PTTL key-with-pexpire-and-XX
(integer) 112999
# EX 和 PX 可以同时出现,但后面给出的选项会覆盖前面给出的选项
redis 127.0.0.1:6379> SET key "value" EX 1000 PX 5000000
OK
redis 127.0.0.1:6379> TTL key
(integer) 4993 # 这是 PX 参数设置的值
redis 127.0.0.1:6379> SET another-key "value" PX 5000000 EX 1000
OK
redis 127.0.0.1:6379> TTL another-key
(integer) 997 # 这是 EX 参数设置的值
SETEX
- 将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)
- 如果 key 已经存在, SETEX 命令将覆写旧值。
等同 :
SET key value
EXPIRE key seconds # 设置生存时间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# 在 key 不存在时进行 SETEX
redis> SETEX cache_user_id 60 10086
OK
redis> GET cache_user_id # 值
"10086"
redis> TTL cache_user_id # 剩余生存时间
(integer) 49
# key 已经存在时,SETEX 覆盖旧值
redis> SET cd "timeless"
OK
redis> SETEX cd 3000 "goodbye my love"
OK
redis> GET cd
"goodbye my love"
redis> TTL cd
(integer) 2997
SETNX
- 将key的值设为value,当且仅当key不存在。
- 若key存在则setnx不做任何操作
1
2
3
4
5
6
7
8
9
10
11redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 设置成功
(integer) 1
redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败
(integer) 0
redis> GET job # 没有被覆盖
"programmer"
STRLEN
- 返回key所存储的字符串长度
- 若存储不是字符串,返回错误
1
2
3
4127.0.0.1:6379> set mykey "www.qipajun.com"
OK
127.0.0.1:6379> strlen mykey
(integer) 15