Redis命令-String

set [key] [value]

设定给定key的值,如果key已存在则会覆盖,并且无视类型

  • Redis 2.6.12 以前的版本,set命令总是返回 OK
  • Redis 2.6.12 版本开始,只有设置成功时才会返回 OK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# key不存在
127.0.0.1:6379> exists set-key
(integer) 0
127.0.0.1:6379> set set-key 1
OK

# key已存在且为其他类型
127.0.0.1:6379> lpush exists-list-key a
(integer) 1
127.0.0.1:6379> lpush exists-list-key b
(integer) 2
127.0.0.1:6379> lpush exists-list-key c
(integer) 3
127.0.0.1:6379> exists exists-list-key
(integer) 1
127.0.0.1:6379> type exists-list-key
list
127.0.0.1:6379> set exists-list-key 1
OK
127.0.0.1:6379> type exists-list-key
string
127.0.0.1:6379> get exists-list-key
"1"

get [key]

获取给定key的值

  • 如果key不存在,则返回nil
  • 如果key储存的值不是string,则返回一个错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 正常情况
127.0.0.1:6379> set get-key 1
OK
127.0.0.1:6379> get get-key
"1"

# key不存在
127.0.0.1:6379> exists unexists-key
(integer) 0
127.0.0.1:6379> get unexists-key
(integer) nil

# key储存的值不是string类型
127.0.0.1:6379> lpush list-key a
(integer) 1
127.0.0.1:6379> get list-key
(error) WRONGTYPE Operation against a key holding the wrong kind of value

getrange [key] [start] [end]

获取存储在指定key 中字符串的子字符串。字符串的截取范围由start和 end两个偏移量决定(包括start和end在内)

1
2
3
4
5
6
7
8
127.0.0.1:6379> set getrange-key helloredis
OK
127.0.0.1:6379> getrange getrange-key 3 7
"lored"
127.0.0.1:6379> getrange getrange-key 3 30
"loredis"
127.0.0.1:6379> getrange getrange-key -2 30
"is"

setrange [key] [offset] [value]

用指定的字符串覆盖给定key所储存的字符串,覆盖的位置从偏移量offset开始,返回被修改后的字符串的长度

1
2
3
4
5
6
127.0.0.1:6379> set setrange-key helloredis
OK
127.0.0.1:6379> setrange setrange-key 3 tt
(integer) 10
127.0.0.1:6379> get setrange-key
"helttredis"

getset [key] [value]

设置key的值并返回旧值,如果key不存在,则返回nil,并设置key的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# key存在
127.0.0.1:6379> set getset-key 111
OK
127.0.0.1:6379> getset getset-key 222
"111"
127.0.0.1:6379> get getset-key
"222

# key不存在
127.0.0.1:6379> exists unexists-getset-key
(integer) 0
127.0.0.1:6379> getset unexists-getset-key 1
(nil)
127.0.0.1:6379> get unexists-getset-key
"1"

getbit [key] [offset]

对给定key所存储的字符串值,获取指定偏移量上的位(bit),当偏移量offset比字符串值的长度大或者key不存在时返回0.

1
2
3
4
5
6
7
8
9
10
11
# 正常情况
127.0.0.1:6379> getbit setbit-key 10086
(integer) 1

# key不存在
127.0.0.1:6379> getbit unexists-key 100
(integer) 0

# 偏移量offset比字符串值的长度大
127.0.0.1:6379> getbit setbit-key 100000
(integer) 0

setbit [key] [offset] [bit]

对给定key所存储的字符串值,设置或清除指定偏移量上的位(bit)

1
2
3
4
5
6
127.0.0.1:6379> setbit setbit-key 10086 1
(integer) 0
127.0.0.1:6379> getbit setbit-key 10086
(integer) 1
127.0.0.1:6379> getbit setbit-key 100
(integer) 0

mget [key1] [key2] … [keyn]

返回一个或多个给定key的值,如果其中某个key不存在,则这个key返回nil

1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> set mget-key 1
OK
127.0.0.1:6379> set mget-key2 2
OK
127.0.0.1:6379> set mget-key3 3
OK
127.0.0.1:6379> mget mget-key mget-key2 mget-key3 mget-key4
1) "1"
2) "2"
3) "3"
4) (nil)

mset [key1] [value1] [key2] [value2] … [keyn] [valuen]

同时设置一个或多个key

1
2
3
4
5
6
127.0.0.1:6379> mset mset-key 1 mset-key2 2 mset-key3 3
OK
127.0.0.1:6379> mget mset-key mset-key2 mset-key3
1) "1"
2) "2"
3) "3"

msetnx [key1] [value1] [key2] [value2] … [keyn] [valuen]

同时设置一个或多个key,当所有key都不存在时,才会成功返回1,有一个key存在就会失败返回0,并且其它不存在的key也不会赋值(原子性)

1
2
3
4
5
6
7
8
127.0.0.1:6379> set msetnx-key 222
OK
127.0.0.1:6379> msetnx msetnx-key 1 msetnx-key2 2 msetnx-key3 3
(integer) 0
127.0.0.1:6379> mget msetnx-key msetnx-key2 msetnx-key3
1) "222"
2) (nil)
3) (nil)

setex [key] [timeout] [value]

为指定key设置值及过期时间,如果key已存在,则覆盖旧值

如果timeout<=0,则返回一个错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 正常情况
127.0.0.1:6379> set setex-key 1
OK
127.0.0.1:6379> setex setex-key 20 2
OK
127.0.0.1:6379> ttl setex-key
(integer) 18
127.0.0.1:6379> get setex-key
"2"

# timeout<=0
127.0.0.1:6379> set setex-key 1
OK
127.0.0.1:6379> setex setex-key 0 1
(error) ERR invalid expire time in setex
127.0.0.1:6379> setex setex-key -1 1
(error) ERR invalid expire time in setex

psetex [key] [timeout] [value]

作用于setex类似,区别在于过期时间戳以毫秒为单位

如果timeout<=0,则返回一个错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 正常情况
127.0.0.1:6379> set psetex-key 1
OK
127.0.0.1:6379> psetex psetex-key 20000 2
OK
127.0.0.1:6379> pttl psetex-key
(integer) 16063
127.0.0.1:6379> get psetex-key
"2"

# timeout<=0
127.0.0.1:6379> set psetex-key 1
OK
127.0.0.1:6379> psetex psetex-key 0 2
(error) ERR invalid expire time in psetex
127.0.0.1:6379> psetex psetex-key -1 2
(error) ERR invalid expire time in psetex

setnx [key] [value]

当给定key不存在时,为key设置给定值,如果key已存在,则不覆盖

1
2
3
4
5
6
7
8
9
10
11
12
13
# 正常情况
127.0.0.1:6379> exists setnx-key
(integer) 0
127.0.0.1:6379> setnx setnx-key 1
(integer) 1

# key已存在
127.0.0.1:6379> set exists-key 1
OK
127.0.0.1:6379> setnx exists-key 2
(integer) 0
127.0.0.1:6379> get exists-key
"1"

strlen [key]

返回给定key所储存的字符串的长度

  • 给定key储存的不是字符串时返回一个错误
  • 给定key不存在时返回0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 正常情况
127.0.0.1:6379> set strlen-key helloredis
OK
127.0.0.1:6379> strlen strlen-key
(integer) 10

# 给定key储存的不是字符串
127.0.0.1:6379> lpush list-key2 111
(integer) 1
127.0.0.1:6379> strlen list-key2
(error) WRONGTYPE Operation against a key holding the wrong kind of value

# 给定key不存在
127.0.0.1:6379> exists unexists-key
(integer) 0
127.0.0.1:6379> strlen unexists-key
(integer) 0

incr [key]

将给定key的值增1,返回增长后的值

  • 如果key不存在,则key的值会先被初始化为0,再执行incr操作
  • 如果值包含错误类型或字符串类型的值不能表示为数字,则返回一个错误
  • 操作的值限定在64位(bit)有符号数字表示之内
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
# 正常情况
127.0.0.1:6379> set incr-key 1
OK
127.0.0.1:6379> incr incr-key
(integer) 2
127.0.0.1:6379> get incr-key
"2"

# key不存在
127.0.0.1:6379> exists incr-key2
(integer) 0
127.0.0.1:6379> incr incr-key2
(integer) 1
127.0.0.1:6379> get incr-key2
"1"

# key储存的值不是数字
127.0.0.1:6379> set incr-key3 1aa
OK
127.0.0.1:6379> incr incr-key3
(error) ERR value is not an integer or out of range

# key储存的值类型不是字符串
127.0.0.1:6379> lpush incr-key4 1
(integer) 1
127.0.0.1:6379> incr incr-key4
(error) WRONGTYPE Operation against a key holding the wrong kind of value

incrby [key] [increment]

作用于incr类似,区别在于增长的值是increment,increment的值不是数字时,会返回一个错误

1
2
3
4
5
6
7
8
9
10
11
12
13
# 正常情况
127.0.0.1:6379> set incrby-key 1
OK
127.0.0.1:6379> incrby incrby-key 2
(integer) 3
127.0.0.1:6379> incrby incrby-key -1
(integer) 2
127.0.0.1:6379> incrby incrby-key 0
(integer) 2

# increment不是数字
127.0.0.1:6379> incrby incrby-key a
(error) ERR value is not an integer or out of range

incrbyfloat [key] [increment]

作用于incrby类似,区别在于increment是浮点数,返回的类型是非指数符号格式或者整数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 正常情况
127.0.0.1:6379> set incrbyfloat-key 0.9
OK
127.0.0.1:6379> incrbyfloat incrbyfloat-key 1.2
"2.1"

# 增长结果转为整型
127.0.0.1:6379> set incrbyfloat-key 0.9
OK
127.0.0.1:6379> incrbyfloat incrbyfloat-key 0.1
"1"

# 指数符号增长后变为非指数格式
127.0.0.1:6379> set incrbyfloat-key2 314e-2
OK
127.0.0.1:6379> get incrbyfloat-key2
"314e-2"
127.0.0.1:6379> incrbyfloat incrbyfloat-key2 0.01
"3.15"

decr [key]

规则与incr类似,区别在于不是增长1,而是减去1

1
2
3
4
5
# 正常情况
127.0.0.1:6379> set decr-key 2
OK
127.0.0.1:6379> decr decr-key
(integer) 1

decrby [key] [decrement]

规则与incrby类似,区别在于不是增长,而是减去decrement

1
2
3
4
127.0.0.1:6379> set decrby-key 10
OK
127.0.0.1:6379> decrby decrby-key 5
(integer) 5

append [key] [value]

为指定的key追加值

  • key存在且储存的是字符串时,用value追加
  • key不存在时,用value赋值
  • key储存的不是string时,返回一个错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 正常情况
127.0.0.1:6379> set append-key aaa
OK
127.0.0.1:6379> append append-key bbb
(integer) 6
127.0.0.1:6379> get append-key
"aaabbb"

# key不存在
127.0.0.1:6379> exists append-key2
(integer) 0
127.0.0.1:6379> append append-key2 bbb
(integer) 3
127.0.0.1:6379> get append-key2
"bbb"

# key储存的不是string
127.0.0.1:6379> lpush append-key3 a
(integer) 1
127.0.0.1:6379> append append-key2 bbb
(integer) 6
127.0.0.1:6379> append append-key3 bbb
(error) WRONGTYPE Operation against a key holding the wrong kind of value

本文作者:Jormin
本文地址https://blog.lerzen.com/2018/01/16/redis命令-string/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

----- 到这结束咯 感谢您的阅读 -----