Redis String命令大全

介绍

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M.

key value
username 张三

一.设置和获取

1. set

可用版本:>=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只能选一个

历史

  • 从 Redis 版本 2.6.12 开始:添加了EX、PX、NX和XX选项。
  • 从 Redis 版本 6.0.0 开始:添加了KEEPTTL选项。
  • 从 Redis 版本 6.2.0 开始:添加了GET、EXAT和PXAT选项。
  • 从 Redis 版本 7.0.0 开始:允许NX和GET选项一起使用。

返回值

  • 设值成功返回OK
  • 使用NX或XX选项之后不满足条件而未执行成功返回nil
  • 使用了get选项就一定返回之前的值

示例

#不带任何参数
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

2.get

可用版本:>=1.0.0

时间复杂度:O(1)

语法

get key

介绍

  • 获取key的值

返回值

  • key的值
  • key不存在返回nil

示例

#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"

3.mset

可用版本:>=1.0.1

时间复杂度:O(N),N是要设置的key的数量

语法

mset key value [key value …]

介绍

  • 批量设置key

返回值

  • OK

示例

127.0.0.1:6379> mset k1 v1 k2 v2
OK

4.mget

可用版本:>=1.0.1

时间复杂度:O(N),N是要获得的key的数量

语法

mget key [key …]

介绍

  • 获得所有指定key的值,不存在的key对应返回nil

返回值

  • 指定键的值列表

示例

127.0.0.1:6379> mget k1 k3
1) "v1"
2) (nil)

5.getset

可用版本:>=1.0.0

时间复杂度:O(1)

语法

getset key value

介绍

  • 获取key的旧值并设置新值
  • 在6.2.0被弃用

返回值

  • key的旧值
  • key不存在返回nil

示例

#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.getdel

可用版本:>=6.2.0

时间复杂度:O(1)

语法

getdel key

介绍

  • 获取key的值并删除

返回值

  • key的值
  • key不存在返回nil

示例

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)

7.setnx

可用版本:>=1.0.0

时间复杂度:O(1)

语法

setnx key value

介绍

  • 只有当key不存在时在给key设置值

返回值

  • key存在返回0
  • key不存在返回1

示例

#key不存在
127.0.0.1:6379> setnx key value
(integer) 1

#key存在
127.0.0.1:6379> setnx key value
(integer) 0

8.msetnx

可用版本:>=1.0.1

时间复杂度:O(N),其中 N 是要设置的key的数量。

语法

msetnx key value[key value …]

介绍

  • 只有当给定的key都不存在时才批量设值key的值

返回值

  • key都不存在返回1
  • key有一个存在返回0

示例

#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

9.setex

可用版本:>=2.0.0

时间复杂度:O(1)

语法

setex key seconds value

介绍

  • 设置key的值并设置过期时间(单位秒)
  • 等同于先执行set key value后执行expire key seconds

返回值

  • 总是OK

示例

127.0.0.1:6379> setex key 10 value
OK

10.psetex

可用版本:>=2.6.0

时间复杂度:O(1)

语法

psetex key millisecondsvalue

介绍

  • 设置key的值并设置过期时间(单位毫秒)
  • 等同于先执行set key value后执行pexpire key milliseconds

返回值

  • 总是OK

示例

127.0.0.1:6379> psetex key 10000 value
OK

11.getex

可用版本:>=6.2.0

时间复杂度:O(1)

语法

getex key [EX seconde | PX milliseconds |EXAT unix-time-seconds | PXAT unix-time-milliseconds | PERSIST]

介绍

  • 获取key的值并设置过期时间
  • 可选参数:
    • EX seconds:设置还有多少秒过期
    • PX milliseconds:设置还有多少毫秒过期
    • EXAT unix-time-seconds:设置在什么时候过期,秒级时间戳
    • PXAT unix-time-milliseconds:设置在什么时候过期,毫秒级时间戳
    • PERSIST:取消key的过期时间

​ 这些参数只能同时出现一个

返回值

  • key的值
  • key不存在返回nil

示例

#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.incr

可用版本:>=1.0.0

时间复杂度:O(1)

语法

incr key

介绍

  • key的值自增1
  • 如果key不存在则会先执行set key 0,然后再执行该命令
  • 如果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

2.decr

可用版本:>=1.0.0

时间复杂度:O(1)

语法

decr key

介绍

  • key的值自减1
  • 如果key不存在则会先执行set key 0,然后再执行该命令
  • 如果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

3.incrby

可用版本:>=1.0.0

时间复杂度:O(1)

语法

incrby key increment

介绍

  • key的值自增increment,increment为负数则自减
  • 如果key不存在则会先执行set key 0,然后再执行该命令
  • 如果key的值不为整数则会报错

返回值

  • 自增后的值

示例

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

4.decrby

可用版本:>=1.0.0

时间复杂度:O(1)

语法

decrby key increment

介绍

  • key的值自减increment,increment为负数则自增
  • 如果key不存在则会先执行set key 0,然后再执行该命令
  • 如果key的值不为整数则会报错

返回值

  • 自减后的值

示例

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

5.incrbyfloat

可用版本:>=2.6.0

时间复杂度:O(1)

语法

incrbyfloat key increment

介绍

  • key的值自增increment,increment为负数则自减
  • 如果key不存在则会先执行set key 0,然后再执行该命令
  • 如果key的值不为小数则会报错
  • 和incrby不同的是这个支持自增小数

返回值

  • 自减后的值

示例

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

三.其他

1.strlen

可用版本:>=2.2.0

时间复杂度:O(1)

语法

strlen key

介绍

  • key的值的长度

返回值

  • key的值的长度
  • key不存在返回0

示例

#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.setrange

可用版本:>=2.2.0
时间复杂度:O(1),不计算复制新字符串所需的时间。通常,该字符串非常小,因此摊销复杂度为 O(1)。否则,复杂度为 O(M),其中 M 是 value 参数的长度

语法

setrange key offset value

介绍

  • 替换指定offset的值
  • 如果索引大于字符串值的最大索引,则会在空缺的地方补\x00
  • key不存在则会先创建key,再执行该操作

返回值

  • 字符串的长度

示例

#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"

3.getrange

可用版本:>=2.4.0
时间复杂度:O(N),N是返回字符串的长度

语法

getrange key start end

介绍

  • 获取索引在start-end的字符串,索引从0开始,包含边界
  • 可以使用负数来表示,-1表示最后一个字符,-2表示倒数第二个,以此类推
  • 使用负数之后会自动变为对应的正数,比如字符串的长度是6,start是-4,转换为正数也就是2
  • 如果start或end的值小于0,会自动变为0
  • 如果end的值大于字符串的长度-1,会自动变为字符串的长度-1
  • start的值一定要小于等于end的值,否则获取不到值

返回值

  • 索引在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"

4.append

可用版本:>=2.0.0
时间复杂度:O(1)

语法

append key value

介绍

  • 如果key已经存在,会将value追加到旧值后面
  • 如果key不存在,则会先创建该key再执行该命令

返回值

  • 字符串的长度

示例

#key不存在
127.0.0.1:6379> append key value
(integer) 5

#key存在
127.0.0.1:6379> append key 1
(integer) 6

5.substr

可用版本:>=1.0.0
时间复杂度:O(N),N是返回字符串的长度

语法

substr key value

介绍

  • 在2.0.0开始被弃用
  • 和getrange命令一模一样

返回值

  • 字符串的长度

6.lcs

可用版本:>=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

你可能感兴趣的:(Redis,redis,缓存,数据库)