Redis之Strings命令

Redis之Strings命令

上篇我们在介绍Redis的数据类型时,介绍了各种数据类型的基本命令,在本篇文章中,我们将详细介绍这几种数据类型的命令

Strings

我们知道Strings数据类型可以存储各种字符串,那么下面我们来介绍一下Strings相关的命令

APPEND

版本: >= 2.0.0

语法: APPEND key value

返回结果: 追加操作后的字符串长度

语义:

  • 如果key已经存在,并且key的值是一个字符串,则将值追加到字符串的末尾;如果值不是字符串,则会报错提示:WRONGTYPE Operation against a key holding the wrong kind of value
  • 如果key不存在,则会创建一个key,并将其值设置为空字符串,然后将值追加到字符串末尾,这种情况的命令执行结果等同于set命令
> append k3 v3
Redis之Strings命令

因为k3不存在,因此执行结果是,创建k3,并将其值设置为空字符串,然后将值追加到字符串末尾。

> append k3 aaa

Redis之Strings命令因为k3已经存在,所以是直接将值拼接到字符串的末尾。

DECR

版本: >= 1.1.0

语法: DECR key

返回结果: 减1后的值

语义:

  • 如果key存在,且值为整数类型的字符串,则将其值减1。如果值不是整数类型的字符串,则会报错:ERR value is not an integer or out of range
  • 如果key不存在,则在执行之前将其值设置为0,然后减1。
  • 该命令是原子性的
> decr k3
ERR value is not an integer or out of range
> decr k4
-1

DECRBY

版本: >= 1.1.0

语法: DECRBY key decrement

返回结果: 减decrement后的值

语义: 类似于DECR命令

  • 如果key存在,且值为整数类型的字符串,则将其值减decrement。如果值不是整数类型的字符串,则会报错:ERR value is not an integer or out of range
  • 如果key不存在,则在执行之前将其值设置为0,然后减decrement。
  • 该命令是原子性的
> decrby myaa 10
-10

GET

版本: >= 1.1.0

语法: GET key

返回结果: key对应的值

语义:

  • 如果key存在,且值是字符串类型,则返回值,如果值不是字符串,则报错:WRONGTYPE Operation against a key holding the wrong kind of value
  • 如果key不存在,则返回null
> set myaa bb
OK
> get myaa
bb

GETDEL

版本: >= 6.2.0

语法: GETDEL key

返回结果: 返回key对应的值

语义:

  • 获取key的值,并将key删除
  • 如果key不存在,则返回null
  • 如果key的值不是字符串,则报错:WRONGTYPE Operation against a key holding the wrong kind of value
> set myaa bb
OK
> getdel myaa
bb

GETEX

版本: >= 6.2.0

语法: GETEX key [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | PERSIST]

返回结果: 返回key对应的值

语义:

  • 获取key的值,并设置key的过期时间。
  • ex:表示过期时间的单位为秒
  • px:表示过期时间单位为毫秒
  • persist:表示去除过期时间
  • 如果key不存在,则返回null
  • 如果key的值不是字符串,则报错:WRONGTYPE Operation against a key holding the wrong kind of value
> set myaa bb
OK
> getex myaa ex 50
bb

GETRANGE

版本: >= 2.4.0

语法: GETRANGE key start end

返回结果: 返回key值的指定范围的字符串

语义:

  • 获取指定范围的字符串
  • start和end的值,既可以为正数也可以为负数,其中-1表示从尾部开始的第一个字符串,以此类推,-2是从尾部开始的第二个字符串。
  • 如果start和end的范围超过字符串的长度限制,则返回""
> set mykey hello
OK
> getrange mykey 0 -1
hello
> getrange mykey 0 2
hel
> getrange mykey -2 -1
lo
> getrange mykey 6 10
""

GETSET

版本: >= 1.0.0

语法: GETSET key value

返回结果: 返回key的值

语义:

  • 获取key的旧值,并设置新值
  • 该命令是原子性的
> getset mykey world
hello

INCR

版本: >= 1.0.0

语法: INCR key

返回结果: 加1后的值

语义:

  • 如果key存在,且值为整数类型的字符串,则将其值加1。如果值不是整数类型的字符串,则会报错:ERR value is not an integer or out of range
  • 如果key不存在,则在执行之前将其值设置为0,然后加1。
  • 该命令是原子性的
> incr k3
ERR value is not an integer or out of range
> incr k4
1

INCRBY

版本: >= 1.0.0

语法: INCRBY key increment

返回结果: 加increment后的值

语义: 类似于INCR命令

  • 如果key存在,且值为整数类型的字符串,则将其值加increment。如果值不是整数类型的字符串,则会报错:ERR value is not an integer or out of range
  • 如果key不存在,则在执行之前将其值设置为0,然后加increment。
  • 该命令是原子性的
> incrby myaa 10
10

INCRBYFLOAT

版本: >= 2.6.0

语法: INCRBYFLOATkey increment

返回结果: 加increment后的值

语义: 类似于INCRBY命令

  • 如果key存在,且值为整数类型的字符串,则将其值加increment。如果值不是整数类型的字符串,则会报错:ERR value is not a valid float
  • 如果key不存在,则在执行之前将其值设置为0,然后加increment。
  • 末尾的0为默认会删除
  • 该命令是原子性的
> INCRBYFLOAT myaa 10.020
10.02

LCS

版本: >= 7.0.0

语法: LCS key1 key2 [LEN] [IDX] [MINMATCHLEN len] [WITHMATCHLEN]

返回结果: 评估两个字符串的相似程度

语义:

  • LCS实现的是最长公共子序列算法
> set k1 mytext1
OK
> set k2 mynewtext2
OK
> lcs k1 k2
mytext

MGET

版本: >= 1.0.0

语法: MGET key [key ...]

返回结果: 返回所有指定key的值

语义:

  • 返回所有key的值
  • 对于值不是字符串类型的key或者不存在的key,返回null
> set k1 v1
OK
> set k2 v2
OK
> lpush k3 v3
1
> mget k1 k2 k3
v1
v2
null

MSET

版本: >= 1.0.1

语法: MSET key value [ key value ...]

返回结果: ok

语义:

  • 批量设置key的值
  • 如果key已经存在,但是其值类型不是字符串,将会覆盖原先的值
  • 该命令是原子性的
> mset k1 v11 k2 v22 k3 v33
OK
> mget k1 k2 k3
v11
v22
v33

MSETNX

版本: >= 1.0.1

语法: MSETNX key value [ key value ...]

返回结果: 所有的key设置成功返回1,否则返回0

语义:

  • 批量设置key的值,如果key不存在
  • 只要有其中一个key存在,则该命令不会执行任何操作
  • 该命令是原子性的
> msetnx k1 v1 k2 v2
1
> mget k1 k2
v1
v2
> msetnx k2 v22 k3 v3
0
> mget k1 k2 k3
v1
v2
null

PSETEX

版本: >= 2.6.0

语法: PSETEX key milliseconds value

返回结果: ok

语义:

  • 设置key的值,同时设置过期时间,单位为毫秒
> psetex k3 1000 v3
OK

SET

版本: >= 1.0.0

语法: SET key value [ NX | XX] [GET] [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

语义:

  • 设置key的值,并可以附带一系列条件,如过期时间,key是否存在等
  • 如果key已经存在,不管key的值是什么数据类型,其值都会被覆盖
  • NX:在key不存在的情况下,设置key
  • XX:在key存在的情况下,设置key
  • GET:如果key的值是字符串类型,则返回key的旧值,如果key的值不是字符串类型,则报错,如果key不存在,则返回null
  • EX seconds:设置key的过期时间,单位是秒
  • PX milliseconds:设置key的过期时间,单位是毫秒
> set k3 v3
OK
# 设置过期时间
> set k3 v3 ex 60
OK

SETEX

版本: >= 2.0.0

语法: SETEX key seconds value

语义:

  • 设置key的值的同时,设置过期时间
  • 该命令是原子性的
> set k3 1000 v3
OK

SETNX

版本: >= 1.0.0

语法: SETNX key value

语义:

  • 如果key不存在,则设置值,并且返回值为1
  • 如果key存在,则不设置值,并且返回值为0
> setnx k5 v5
1
> setnx k5 v55
0

SETRANGE

版本: >= 2.2.0

语法: SETRANGE key offset value

语义:

  • 从offset偏移量开始覆盖字符串,如果偏移量超过了字符串的长度,则用zero-bytes填充
  • 最大偏移量offset为2^29 -1 (536870911),因为Redis的字符串大小被限制为512MB
> set k6 v6
OK
> setrange k6 1 aaaaaa
7
> get k6
vaaaaaa
> setrange k6 8 bbb
11
> get k6
vaaaaaabbb
Redis之Strings命令
在这里插入图片描述

STRLEN

版本: >= 2.2.0

语法: STRLEN key

语义:

  • 如果key存在,其值为字符串,则返回字符串值的长度,如果值不是字符串,则报错
  • 如果key不存在,则返回0
# key存在,且值为字符串

>
 strlen k6
11
# key不存在
> strlen k7
0

以上就是Strings数据类型的命令介绍了

最后,欢迎关注微信公众号一起交流


原文始发于微信公众号(阿喵程序园):Redis之Strings命令

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42821.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!