String类型相关命令
1. SET命令
语法: SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
用于将键 key 设定为指定的"字符串"值。如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。
当 set 命令执行成功之后,之前设置的过期时间都将失效, 其中参数说明如下:
EX seconds
: 以秒为单位设置过期时间PX milliseconds
: 以毫秒为单位设置过期时间EXAT unix-time-seconds
: 设置以秒为单位的UNIX时间戳为过期时间PXAT unix-time-milliseconds
: 设置以毫秒为单位的UNIX时间戳为过期时间NX
: 键不存在设置键值XX
: 键存在是设置键值KEEPTTL
: 保留设置前指定键的生存时间GET
: 返回指定键原本的值,若键不存在返回nil
提示
SET命令使用EX
、PX
、NX
参数,其效果等同于SETEX
、SETPX
、SETNX
命令, KEEPTTL
、GET
、EXAT
、PXAT
是Redis6.X新增的参数选项。
127.0.0.1:6379[1]> set wife "xiaomei" EX 15
OK
127.0.0.1:6379[1]> get wife
"xiaomei"
127.0.0.1:6379[1]> ttl wife
(integer) 6
127.0.0.1:6379[1]> set wife "xx"
OK
127.0.0.1:6379[1]> ttl wife
(integer) -1
127.0.0.1:6379[1]> set wife "xiaomei" NX
(nil)
127.0.0.1:6379[1]> set wife "xiaomei" GET
"xx"
2. SETNX命令(已过时)
语法: SETNX key value
SETNX
(SET if Not eXists)用来在指定的key不存在时,为key设置指定的值,当key存在时,什么也不做。自Redis2.6.12之后被置为过时,用SET
命令配合NX
参数使用作用等效。
3. SETEX命令(已过时)
语法: SETEX key seconds value
SETEX
(SET with EXpire)用来将key的值设置为value, 并将key的生存时间设置为seconds秒钟, 自Redis2.6.12之后被置为过时,用SET
命令配合EX
参数使用作用等效。
应用场景: 分布式锁🔒
4. MSET命令
语法: MSET key value [key value ...]
设置多个key的值为各自对应的value。MSET
像SET
一样,会用新值替换旧值。如果你不想覆盖旧值,可以使用MSETNX
。MSET
是原子操作,所有key的值同时设置。
127.0.0.1:6379[1]> mset k1 "hello" kw "world"
OK
127.0.0.1:6379[1]> mget k1 kw
1) "hello"
2) "world"
5. METNX命令
语法: METNX key value [key value ...]
当且仅当所有给定key都不存在时, 为所有给定key设置值。即使只有一个给定key已经存在,MSETNX
命令也会拒绝执行对所有key的设置操作。MSETNX
是一个原子性(atomic)操作, 所有给定key要么就全部都被设置, 要么就全部都不设置。
- 返回1: 当所有给定键都设置成功时
- 返回0: 某个给定键已经存在而导致设置未能成功
127.0.0.1:6379[1]> msetnx k3 "test" k4 "jack"
(integer) 1
127.0.0.1:6379[1]> msetnx k1 "test" k3 "jack"
(integer) 0
6. SETRANGE命令
语法: SETRANGE key offset value
从偏移量offset
开始, offset
必须大于等于0,覆盖key中储存的旧字符串值。若key不存在,旧字符串值当作空白字符串处理。SETRANGE
命令可以保证key中的字符串足够长,以便将value覆盖到key中。如果键key中储存的旧字符串值长度比偏移量小(比如value
只有5个字符长,但要设置的offset
是从10开始),那么原字符和偏移量之间的空白将用零字节 "\x00" 进行填充。
127.0.0.1:6379[1]> set k5 "test"
OK
127.0.0.1:6379[1]> setrange k5 1 "abcd"
(integer) 5
127.0.0.1:6379[1]> get k5
"tabcd"
127.0.0.1:6379[1]> setrange k5 0 "abcd"
(integer) 5
127.0.0.1:6379[1]> get k5
"abcdd"
127.0.0.1:6379[1]> setrange k6 3 "apple"
(integer) 8
127.0.0.1:6379[1]> get k6
"\x00\x00\x00apple"
7. APPEND命令
语法: APPEND key value
用于为指定的 key 追加值。如果key已经存在并且是一个字符串,APPEND
命令将value追加到key原来的值的末尾。如果key不存在,APPEND
就简单地将给定key设为value,就像执行SET key value
一样。
127.0.0.1:6379> append name 'jack'
(integer) 4
127.0.0.1:6379> append name ' try hard!'
(integer) 14
127.0.0.1:6379> get name
"jack try hard!"
8. STRLEN命令
语法: STRLEN key
用于获取指定key所储存的字符串值的长度。当key储存的不是字符串类型时,返回错误。
127.0.0.1:6379[1]> strlen k6
(integer) 8
127.0.0.1:6379[1]> strlen k5
(integer) 5
9. INCR命令
语法: INCR key
将 key 中储存的数字值增1。如果key不存在,那么key的值会先被初始化为0,然后再执行INCR
操作。返回值为在执行加法操作之后的值。如果value包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误ERR hash value is not an integer
。
本操作的值限制在64位(bit)有符号数字表示之内。
提示
本质上这是一个字符串操作,因为Redis没有专门的整数类型。存储在key中的字符串被转换为十进制有符号整数,在此基础上加1。
应用场景: 比如抖音无限点赞某个视频或者商品,点一下加一次; 微信文章末尾的点赞功能
127.0.0.1:6379> set num 123
OK
127.0.0.1:6379> incr num
(integer) 124
127.0.0.1:6379> incr num
(integer) 125
127.0.0.1:6379> incr nn
(integer) 1
127.0.0.1:6379> incr nn
(integer) 2
10. INCRBY命令
语法: INCRBY key increment
将key中储存的数字加上指定的增量值。如果key不存在,那么key的值会先被初始化为0,然后再执行INCRBY
命令。返回值为在执行加法操作之后的值。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误ERR hash value is not an integer
。
本操作的值限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> incrby nn 2
(integer) 5
127.0.0.1:6379> incrby nn 2
(integer) 7
127.0.0.1:6379> incrby name 2
(error) ERR value is not an integer or out of range
11. DECR命令
语法: DECR key
为key储存的数字值减去1。如果key不存在,那么键key的值会先被初始化为0, 然后再执行DECR
操作。返回值为在执行减法操作之后的值。如果key储存的值不能被转换为数字,那么DECR
命令将返回一个错误。
本操作的值限制在64位(bit)有符号数字表示之内。
127.0.0.1:6379> decr n1
(integer) -1
127.0.0.1:6379> decr name
(error) ERR value is not an integer or out of range
12. DECRBY命令
语法: DECRBY key decrement
将key储存的整数值减去decrement
。如果key不存在,那么key的值会先被初始化为0,然后再执行DECRBY
命令。返回值为在执行减法操作之后的值。如果key储存的值不能被转换为数字, 那么DECRBY
命令将返回一个错误。 本操作的值限制在64位(bit)有符号数字表示之内。
127.0.0.1:6379> decrby n2 2
(integer) -2
127.0.0.1:6379> decrby n2 2
(integer) -4
127.0.0.1:6379> decrby name 100
(error) ERR value is not an integer or out of range
13. GETSET(已过时)
格式: GETSET key value
将key的值设为value,并返回键key在被设置之前的旧值。自Redis 6.2.0之后被置为过时,用SET
命令配合GET
参数使用作用等效。返回给定键 key 的旧值。如果key没有旧值,也即是说,key在被设置之前并不存在,那么命令返回nil。当key存在但不是字符串类型时,命令返回一个错误。