string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M.
key | value |
---|---|
username | 张三 |
可用版本:>=1.0.0
时间复杂度:O(1)
set key value [NX | XX] [GET] [EX seconds |PX milliseconds |EXAT unix-time-seconds |PXAT unix-time-milliseconds |KEEPTTL]
添加一个key,并给该key的值设为value,key存在则覆盖。
当值被覆盖时,如果没有给过期时间的参数,则会清空过期时间
可选参数:
NX:当key不存在时才设置(类似于setnx)
XX:当key存在时才设置
GET:获取key原来的值(类似于getset)
EX:设置key的过期时间,以秒为单位(类似于setex)
PX:设置key的过期时间,以毫秒为单位(类似于psetex)
EXAT:设置key在什么时间过期,以秒级时间戳为单位
PXAT:设置key在什么时间过期,以毫秒级时间戳为单位
KEEPTTL:在覆盖值时保留key的失效时间
NX和XX只能选一个
EXAT、PXAT、EX、PX和KEEPTTL只能选一个
#不带任何参数
127.0.0.1:6379> set key value
OK
#带get
127.0.0.1:6379> set key value2 get
"value"
#带NX
127.0.0.1:6379> set key value NX
(nil)
#带XX
127.0.0.1:6379> set key value XX
OK
#带EX
127.0.0.1:6379> set key value ex 10
OK
#带PX
127.0.0.1:6379> set key value px 10000
OK
#带EXAT
127.0.0.1:6379> set key value EXAT 8888888888
OK
#带PXAT
127.0.0.1:6379> set key value EXAT 8888888888000
OK
#带KEEPTTL
127.0.0.1:6379> set key value keepttl
OK
可用版本:>=1.0.0
时间复杂度:O(1)
get key
#key不存在
127.0.0.1:6379> get key
(nil)
#key存在
127.0.0.1:6379> set key value
OK
127.0.0.1:6379> get key
"value"
可用版本:>=1.0.1
时间复杂度:O(N),N是要设置的key的数量
mset key value [key value …]
127.0.0.1:6379> mset k1 v1 k2 v2
OK
可用版本:>=1.0.1
时间复杂度:O(N),N是要获得的key的数量
mget key [key …]
127.0.0.1:6379> mget k1 k3
1) "v1"
2) (nil)
可用版本:>=1.0.0
时间复杂度:O(1)
getset key value
#key不存在
127.0.0.1:6379> getset k1 v1
(nil)
#key存在
127.0.0.1:6379> getset k1 v3
"v1"
127.0.0.1:6379> get k1
"v3"
可用版本:>=6.2.0
时间复杂度:O(1)
getdel key
127.0.0.1:6379> set key value
OK
#key存在
127.0.0.1:6379> getdel key
"value"
#key不存在
127.0.0.1:6379> getdel key
(nil)
可用版本:>=1.0.0
时间复杂度:O(1)
setnx key value
#key不存在
127.0.0.1:6379> setnx key value
(integer) 1
#key存在
127.0.0.1:6379> setnx key value
(integer) 0
可用版本:>=1.0.1
时间复杂度:O(N),其中 N 是要设置的key的数量。
msetnx key value[key value …]
#key都不存在
127.0.0.1:6379> msetnx k1 v1 k2 v2
(integer) 1
#存在一个key
127.0.0.1:6379> msetnx k1 v1 k3 v3
(integer) 0
可用版本:>=2.0.0
时间复杂度:O(1)
setex key seconds value
127.0.0.1:6379> setex key 10 value
OK
可用版本:>=2.6.0
时间复杂度:O(1)
psetex key millisecondsvalue
127.0.0.1:6379> psetex key 10000 value
OK
可用版本:>=6.2.0
时间复杂度:O(1)
getex key [EX seconde | PX milliseconds |EXAT unix-time-seconds | PXAT unix-time-milliseconds | PERSIST]
这些参数只能同时出现一个
#key不存在
127.0.0.1:6379> getex key
(nil)
#key存在
127.0.0.1:6379> set key value
OK
127.0.0.1:6379> getex key
"value"
#加EX
127.0.0.1:6379> getex key EX 10
"value"
#加PX
127.0.0.1:6379> getex key PX 10000
"value"
#加EXAT
127.0.0.1:6379> getex key EXAT 333333333
"value"
#加PXAT
127.0.0.1:6379> getex key PXAT 333333333000
"value"
#加PERSIST
127.0.0.1:6379> getex key PERSIST
"value"
可用版本:>=1.0.0
时间复杂度:O(1)
incr key
127.0.0.1:6379> get key
(nil)
#key不存在
127.0.0.1:6379> incr key
(integer) 1
#key存在
127.0.0.1:6379> incr key
(integer) 2
可用版本:>=1.0.0
时间复杂度:O(1)
decr key
127.0.0.1:6379> get key
(nil)
#key不存在
127.0.0.1:6379> decr key
(integer) -1
#key存在
127.0.0.1:6379> decr key
(integer) -2
可用版本:>=1.0.0
时间复杂度:O(1)
incrby key increment
127.0.0.1:6379> get key
(nil)
#key不存在
127.0.0.1:6379> incrby key 2
(integer) 2
#key存在
127.0.0.1:6379> incrby key 3
(integer) 5
#increment为负数
127.0.0.1:6379> incrby key -2
(integer) 3
可用版本:>=1.0.0
时间复杂度:O(1)
decrby key increment
127.0.0.1:6379> get key
(nil)
#key不存在
127.0.0.1:6379> decrby key 2
(integer) -2
#key存在
127.0.0.1:6379> decrby key 3
(integer) -5
#increment为负数
127.0.0.1:6379> decrby key -2
(integer) -3
可用版本:>=2.6.0
时间复杂度:O(1)
incrbyfloat key increment
127.0.0.1:6379> get key
(nil)
#key不存在
127.0.0.1:6379> incrbyfloat key 1.1
(integer) 1.1
#key存在
127.0.0.1:6379> incrbyfloat key 2.2
(integer) 3.3
#increment为负数
127.0.0.1:6379> incrbyfloat key -1.1
(integer) 2.2
可用版本:>=2.2.0
时间复杂度:O(1)
strlen key
#key不存在
127.0.0.1:6379> strlen key
(integer) 0
#key存在
127.0.0.1:6379> set key value
OK
127.0.0.1:6379> strlen key
(integer) 5
可用版本:>=2.2.0
时间复杂度:O(1),不计算复制新字符串所需的时间。通常,该字符串非常小,因此摊销复杂度为 O(1)。否则,复杂度为 O(M),其中 M 是 value 参数的长度
setrange key offset value
#offset小于等于字符串的长度-1
127.0.0.1:6379> set key 123456
OK
127.0.0.1:6379> setrange key 2 4
(integer) 6
127.0.0.1:6379> get key
"124456"
#offset大于字符串的长度
127.0.0.1:6379> setrange key 7 1
(integer) 8
127.0.0.1:6379> get key
"124456\x001"
可用版本:>=2.4.0
时间复杂度:O(N),N是返回字符串的长度
getrange key start end
#start和end都为正数
127.0.0.1:6379> getrange key 1 5
"24456"
#start和end都为负数
127.0.0.1:6379> getrange key -3 -2
"6\x00"
#start>end
127.0.0.1:6379> getrange key 2 1
""
#end大于最大索引
127.0.0.1:6379> getrange key 0 10
"124456\x001"
#end小于最小索引
127.0.0.1:6379> getrange key 0 -8
"1"
#start小于最小索引
127.0.0.1:6379> getrange key -8 2
"124"
可用版本:>=2.0.0
时间复杂度:O(1)
append key value
#key不存在
127.0.0.1:6379> append key value
(integer) 5
#key存在
127.0.0.1:6379> append key 1
(integer) 6
可用版本:>=1.0.0
时间复杂度:O(N),N是返回字符串的长度
substr key value
可用版本:>=7.0.0
时间复杂度:O(N*M),N和M分别是s1和s2的长度
lcs key1 key2 [LEN] [IDX] [MINMATCHLEN len] [WITHMATCHLEN]
获取key1和key2相同字符串的内容,匹配单个字符串,而不是连续的字符串
可选参数:
LEN:匹配相同字符串的长度
IDX:匹配相同字符串时的匹配位置,匹配顺序从从右到左
MINMATCHLEN:需要和IDX一起用,用于匹配公共字符串的最小长度,如果两个字符串中相同字符串内容为12和123,将len设置为3则只会匹配123,为2就是都匹配,为4则都不会匹配。
WITHMATCHLEN:需要和IDX一起用,在匹配位置加上匹配的字符串长度
LEN不能和参数一起用,其他的可以组合使用
如果没有给参数,返回公共字符串
给了LEN则是返回公共字符串的长度
给了IDX
第一行 返回mathes
第二行返回:无匹配内容返回(empty array)
第N个公共字符串 第1个key 开始索引
结束索引
第2个key 开始索引
结束索引
返回len
公共字符串的长度
给了WITHMATCHLEN:在匹配位置后面加上公共字符串的长度
#不带参数
127.0.0.1:6379> set k1 va123
OK
127.0.0.1:6379> set k2 vs123
OK
127.0.0.1:6379> lcs k1 k2
"v123"
#带LEN
127.0.0.1:6379> lcs k1 k2 LEN
(integer) 4
#带IDX
127.0.0.1:6379> lcs k1 k2 IDX
1) "matches"
2) 1) 1) 1) (integer) 2 #第一次匹配的字符串为123,k1中1的开始索引为2
2) (integer) 4 #第一次匹配的字符串为123,k1中3的结束索引为4
2) 1) (integer) 2 #第一次匹配的字符串为123,k2中1的开始索引为2
2) (integer) 4 #第一次匹配的字符串为123,k2中3的开始索引为4
2) 1) 1) (integer) 0 #第二次匹配的字符串为v,k1中v的开始索引为0
2) (integer) 0 #第二次匹配的字符串为v,k1中v的结束索引为0
2) 1) (integer) 0 #第二次匹配的字符串为v,k2中v的开始索引为0
2) (integer) 0 #第二次匹配的字符串为v,k2中v的结束索引为0
3) "len"
4) (integer) 4
#带MINMATHCHLEN
127.0.0.1:6379> lcs k1 k2 IDX MINMATHCHLEN 3
1) "matches"
2) 1) 1) 1) (integer) 2
2) (integer) 4
2) 1) (integer) 2
2) (integer) 4
3) "len"
4) (integer) 4
#带WITHMATCHLEN
127.0.0.1:6379> lcs k1 k2 IDX withmatchlen
1) "matches"
2) 1) 1) 1) (integer) 2
2) (integer) 4
2) 1) (integer) 2
2) (integer) 4
3) (integer) 3 #此次公共字符串的长度
2) 1) 1) (integer) 0
2) (integer) 0
2) 1) (integer) 0
2) (integer) 0
3) (integer) 1 #此次公共字符串的长度
3) "len"
4) (integer) 4
#带IDX无匹配内容时
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> lcs k1 k2 IDX
1) "matches"
2) (empty array)
3) "len"
4) (integer) 0