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

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

> append k3 aaa


因为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

在这里插入图片描述

STRLEN

版本: >= 2.2.0
语法: STRLEN key
语义:

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值