Redis 字符串string常用命令总结

本文详细介绍了Redis中字符串数据结构的常用命令,包括set、get、mset、mget、setex、psetex、setnx、msetnx、setrange、getrange、getset、incr、decr、incrby、decrby、strlen、append等。通过实例展示了各个命令的用法和功能,帮助读者深入理解Redis字符串操作。
摘要由CSDN通过智能技术生成

Redis中文官网命令大全
笔者Redis字符串数据结构源码分析文章推送:Redis 5.0数据结构之SDS简单动态字符串实现源码详解

string常用命令汇总

命令语法语义
setset key value [EX|PX time] [NX|XX]将键key设定为value值。如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,可以选用EX或PX来指定键key的过期时间,可以选用NX或XX来指定键key不存在或存在时才执行命令
getget key返回键key的value,如果key不存在,返回nil如果键key的value不是string,就返回错误
msetmset key value [key value …]set的复数操作版本,将键keys设定为values值
mgetmget key [key …get的复数操作版本,返回键keys的values值,对于不存在的键key和非string类型的value值,一律返回nil
setexsetex key seconds value将键key设定为value值,并且设置键在seconds秒后过期
psetexpsetex key milliseconds value将键key设定为value值,并且设置键在milliseconds毫秒后过期
setnxsetnx key value将键key的值设为value值,当目标键key不存在时效果等同于set,键key存在时什么也不做
msetnxmsetnx key value [key value …]setnx的复数操作版本,只要键keys中任一key存在,则msetnx一个set操作也不会执行
setrangesetrange key offset value覆盖键key原value值的一部分,offset是原value起始位置,新的value值从offset位置开始覆盖
getrangegetrange key start end返回键key的子串,子串为value值在start和end区间内的部分
getsetgetset key value将键key的value值返回,并使用传入新value值覆盖。如果key存在但是对应的value不是字符串,就返回错误
strlenstrlen key返回键key的value值长度,如果value值非string类型则返回错误
appendappend key value如果键key存在,则将新value值追加到原value值的结尾,如果键key不存在,则创建一个空字符串键key后执行追加操作
incrincr key键key的value值自增1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误
incrbyincrby key increment键key的value值自增increment ,如果value值非string类型或其存储的字符串不能表示为整数则返回错误
decrdecr key键key的value值自减1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误
decrbydecrby key decrement键key的value值自减1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误

命令演示

setget系列

set和get

可以使用set方法创建一个键并设置value值或者改变现有键key的value值,2.6.12版本以后Redis为set添加了如下几个可选选项:

  • EX seconds – 设置键key的过期时间,单位时秒
  • PX milliseconds – 设置键key的过期时间,单位时毫秒
  • NX – 只有键key不存在的时候才会设置key的值
  • XX – 只有键key存在的时候才会设置key的值

有了以上几个可选选项后,可以使得单独的set命令就具有setex、setnx等命令的功能。当set执行成功时,此前键key设置的过期时间会被覆盖或失效。


可以使用get方法获取某个键key的value值,目标键key不存在时返回nil,目标键key的值不是string类型时返回错误。

使用示例如下:

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> set k1 v2
OK
127.0.0.1:6379> get k1
"v2"

127.0.0.1:6379> set k2 v3 ex 10 nx
OK
127.0.0.1:6379> ttl k2 //ttl 查看键k2过期时间
(integer) 9
127.0.0.1:6379> get k2
"v3"
127.0.0.1:6379> ttl k2
(integer) -2	// k2过期
127.0.0.1:6379> get k2
(nil)

mset和mget

mset和mget分别是set和get的复数操作版本,使用方法与set和get基本无差异,只不过能同时设置或获取多个键的值。mset不像set具有设置过期时间等选项,同时mset是原子操作,所有给定的键key都是一次性设置。

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) "v4"

setex和psetex

二者使用方法完全相同,都是为键key设置value值并设定过期时间,唯一的区别是使用setex时设定的时间单位是秒s,使用psetex时设定的时间单位是毫秒ms。使用setex比连续使用set和expire执行效率更快。

只演示setex,psetex使用方法完全相同。

127.0.0.1:6379> setex k1 10 v1
OK
127.0.0.1:6379> ttl k1
(integer) 7
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> ttl k1
(integer) -2
127.0.0.1:6379> get k1
(nil)

setnx和msetnx

setnx全称是set if not exist,即不存在时set,只有在目标键key不存在时才会set,否则什么也不做,msetnx是mset和setnx的结合,传入键keys中只要有任何一个键key存在,则msetnx一个操作也不会执行。

127.0.0.1:6379> setnx k1 v1
(integer) 1
127.0.0.1:6379> setnx k1 v1
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> msetnx k1 v1 k2 v2
(integer) 0
127.0.0.1:6379> msetnx k2 v2 k3 v3
(integer) 1
127.0.0.1:6379> keys *
1) "k1"
2) "k3"
3) "k2"

setrange和getrange

使用setrange可以覆盖目标键key原value值的一部分,offset作为覆盖的起始位置,有两种特殊情况。

  • 当传入的新value值的长度 > 原value长度-offset时。效果等同于在原value的offset的位置覆盖追加新value,例如键key原value值为aaa,offset为1,新的value值为bbb,最终键key的value为abbb。
  • 当传入offset > 键key原value值的长度时。原value末尾位置到offset位置部分用0补全,然后追加新value值,例如key原value值为aaa,offset为5,新的value值为bbb,最终键key的value为aaa00bbb。
127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> setrange k1 1 aaaa
(integer) 5
127.0.0.1:6379> get k1
"aaaaa"
127.0.0.1:6379> setrange k1 8 bbb
(integer) 11
127.0.0.1:6379> get k1
"aaaaa\x00\x00\x00bbb"

使用getrange可以获取键key的子串,即返回原value值[start, stop]闭区间内的部分,可以使start或stop值为负数,表示从原value尾部开始获取。

127.0.0.1:6379> set k1 123456789
OK
127.0.0.1:6379> getrange k1 1 3
"234"
127.0.0.1:6379> getrange k1 0 -1
"123456789"
127.0.0.1:6379> getrange k1 -5 -1
"56789"

getset

将键key的旧value值返回,并使用传入新value值覆盖。

127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> getset k1 v2
"v1"
127.0.0.1:6379> get k1
"v2"

自运算

incr和decr

incr和decr用法相同,使用incr自增1,使用decr自减1。

如果键key不存在,则创建相应键key并设初值为0后自增或自减。如果键key的value值并非string类型或存储的字符串不能表示为一个整数,则返回错误。

用法相同,只演示incr:

127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> incr k1
(integer) 2
127.0.0.1:6379> decr k1
(integer) 1
127.0.0.1:6379> incr k2
(integer) 1

incrby和decrby

与incr和decr用法完全相同,只不过可以指定自运算步长。

127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> incrby k1 5
(integer) 6
127.0.0.1:6379> decrby k1 3
(integer) 3
127.0.0.1:6379> incrby k2 10
(integer) 10

其他

strlen

返回键key的value值长度,如果value值非string类型则返回错误

127.0.0.1:6379> set k1 abc
OK
127.0.0.1:6379> strlen k1
(integer) 3

append

如果键key存在,则将新value值追加到原value值末尾,如果键key不存在,效果等同于set,效果等同于创建一个键key,并将其值设置为传入value。

127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> append k1 bbb
(integer) 6
127.0.0.1:6379> get k1
"aaabbb"
127.0.0.1:6379> append k2 ccc
(integer) 3
127.0.0.1:6379> get k2
"ccc"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7rulyL1ar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值