Redis 字符串(String)

Redis 字符串(String)

Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:

语法

redis 127.0.0.1:6379> COMMAND KEY_NAME

实例

redis 127.0.0.1:6379> SET appblog redis
OK
redis 127.0.0.1:6379> GET appblog
"redis"

在以上实例中我们使用了 SET 和 GET 命令,键为 appblog

Redis 字符串命令

set key value

设置指定 key 的值

get key

获取指定 key 的值

getrange key start end

Redis Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)

redis 127.0.0.1:6379> set mykey "This is my test key"
OK
redis 127.0.0.1:6379> getrange mykey 0 3
"This"
redis 127.0.0.1:6379> getrange mykey 0 -1
"This is my test key"

getset key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)

  • 返回给定 key 的旧值。当 key 没有旧值时,即 key 不存在时,返回 nil
  • 当 key 存在但不是字符串类型时,返回一个错误
redis> GETSET db mongodb    # 没有旧值,返回 nil
(nil)

redis> GET db
"mongodb"

redis> GETSET db redis      # 返回旧值 mongodb
"mongodb"

redis> GET db
"redis"

getbit key offset

对 key 所储存的字符串值,获取指定偏移量上的位(bit)

当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0

# 对不存在的 key 或者不存在的 offset 进行 GETBIT,返回 0

redis> EXISTS bit
(integer) 0

redis> GETBIT bit 10086
(integer) 0

# 对已存在的 offset 进行 GETBIT

redis> SETBIT bit 10086 1
(integer) 0

redis> GETBIT bit 10086
(integer) 1

mget key1 [key2..]

获取所有(一个或多个)给定 key 的值

redis 127.0.0.1:6379> SET key1 "hello"
OK
redis 127.0.0.1:6379> SET key2 "world"
OK
redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
1) "Hello"
2) "World"
3) (nil)

setbit key offset value

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)

redis> SETBIT bit 10086 1
(integer) 0

redis> GETBIT bit 10086
(integer) 1

redis> GETBIT bit 100   # bit 默认被初始化为 0
(integer) 0

setex key seconds value

将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)

Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在,SETEX 命令将会替换旧的值

redis 127.0.0.1:6379> SETEX mykey 60 redis
OK
redis 127.0.0.1:6379> TTL mykey
60
redis 127.0.0.1:6379> GET mykey
"redis"

setnx key value

Setnx(SET if Not eXists)命令只有在 key 不存在时设置 key 的值

redis> EXISTS job                # job 不存在
(integer) 0

redis> SETNX job "programmer"    # job 设置成功
(integer) 1

redis> SETNX job "code-farmer"   # 尝试覆盖 job ,失败
(integer) 0

redis> GET job                   # 没有被覆盖
"programmer"

setrange key offset value

用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始

redis 127.0.0.1:6379> SET key1 "Hello World"
OK
redis 127.0.0.1:6379> SETRANGE key1 6 "Redis"
(integer) 11
redis 127.0.0.1:6379> GET key1
"Hello Redis"

strlen key

返回 key 所储存的字符串值的长度

当 key 不存在时,返回 0

mset key value [key value ...]

同时设置一个或多个 key-value 对

redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
OK
redis 127.0.0.1:6379> GET key1
"Hello"
redis 127.0.0.1:6379> GET key2
"World"

msetnx key value [key value ...]

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在

  • 当所有 key 都成功设置,返回 1
  • 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0
# 对不存在的 key 进行 MSETNX

redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
(integer) 1

redis> MGET rmdbs nosql key-value-store
1) "MySQL"
2) "MongoDB"
3) "redis"

# mset 的给定 key 当中有已存在的 key

redis> MSETNX rmdbs "Sqlite" language "python"  # rmdbs 键已经存在,操作失败
(integer) 0

redis> EXISTS language                          # 因为 MSET 是原子性操作,language 没有被设置
(integer) 0

redis> GET rmdbs                                # rmdbs 也没有被修改
"MySQL"

psetex key milliseconds value

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位

incr key

将 key 中储存的数字值增一

  • 如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行 INCR 操作
  • 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
  • 本操作的值限制在 64 位(bit)有符号数字表示之内
redis> SET page_view 20
OK

redis> INCR page_view
(integer) 21

redis> GET page_view    # 数字值在 Redis 中以字符串的形式保存
"21"

incrby key increment

将 key 所储存的值加上给定的增量值(increment)

  • 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令
  • 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
  • 本操作的值限制在 64 位(bit)有符号数字表示之内
# key 存在且是数字值

redis> SET rank 50
OK

redis> INCRBY rank 20
(integer) 70

redis> GET rank
"70"

# key 不存在时

redis> EXISTS counter
(integer) 0

redis> INCRBY counter 30
(integer) 30

redis> GET counter
"30"

# key 不是数字值时

redis> SET book "long long ago..."
OK

redis> INCRBY book 200
(error) ERR value is not an integer or out of range

incrbyfloat key increment

将 key 所储存的值加上给定的浮点增量值(increment)

如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0,再执行加法操作

# 值和增量都不是指数符号

redis> SET mykey 10.50
OK

redis> INCRBYFLOAT mykey 0.1
"10.6"

# 值和增量都是指数符号

redis> SET mykey 314e-2
OK

redis> GET mykey                # 用 SET 设置的值可以是指数符号
"314e-2"

redis> INCRBYFLOAT mykey 0      # 但执行 INCRBYFLOAT 之后格式会被改成非指数符号
"3.14"

# 可以对整数类型执行

redis> SET mykey 3
OK

redis> INCRBYFLOAT mykey 1.1
"4.1"

# 后跟的 0 会被移除

redis> SET mykey 3.0
OK

redis> GET mykey                                    # SET 设置的值小数部分可以是 0
"3.0"

redis> INCRBYFLOAT mykey 1.000000000000000000000    # 但 INCRBYFLOAT 会将无用的 0 忽略掉,有需要的话,将浮点变为整数
"4"

redis> GET mykey
"4"

decr key

将 key 中储存的数字值减一

  • 如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行 DECR 操作
  • 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
  • 本操作的值限制在 64 位(bit)有符号数字表示之内
# 对存在的数字值 key 进行 DECR

redis> SET failure_times 10
OK

redis> DECR failure_times
(integer) 9

# 对不存在的 key 值进行 DECR

redis> EXISTS count
(integer) 0

redis> DECR count
(integer) -1

# 对存在但不是数值的 key 进行 DECR

redis> SET company YOUR_CODE_SUCKS.LLC
OK

redis> DECR company
(error) ERR value is not an integer or out of range

decrby key decrement

key 所储存的值减去给定的减量值(decrement)

  • 如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行 DECRBY 操作
  • 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
  • 本操作的值限制在 64 位(bit)有符号数字表示之内
# 对已存在的 key 进行 DECRBY

redis> SET count 100
OK

redis> DECRBY count 20
(integer) 80

# 对不存在的 key 进行DECRBY

redis> EXISTS pages
(integer) 0

redis> DECRBY pages 10
(integer) -10

APPEND key value

如果 key 已经存在并且是一个字符串,APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾

  • 如果 key 已经存在并且是一个字符串,APPEND 命令将 value 追加到 key 原来的值的末尾
  • 如果 key 不存在, APPEND 就简单地将给定 key 设为 value,就像执行 SET key value 一样
# 对不存在的 key 执行 APPEND

redis> EXISTS myphone               # 确保 myphone 不存在
(integer) 0

redis> APPEND myphone "iphone"       # 对不存在的 key 进行 APPEND ,等同于 SET myphone "iphone"
(integer) 5                         # 字符长度

# 对已存在的字符串进行 APPEND

redis> APPEND myphone " - 13"     # 长度从 5 个字符增加到 12 个字符
(integer) 12

redis> GET myphone
"iphone - 13"

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/24/redis-string/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Redis 字符串(String)
Redis 字符串(String) Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下: 语法 redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redi……
<<上一篇
下一篇>>
文章目录
关闭
目 录