Redis基础篇10 — 使用命令(二)对 value 的操作命令

value 的类型

在演示对 value 的操作命令之前,需要首先介绍 value 的类型。我们说 Redis 的数据类型指的就是 value 的数据类型。以下说明的是 Redis 开源版支持的数据类型。

有五大基础的、常用的数据类型,它们是:

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set (集合)
  • sorted set(zset,有序集合)

这五大数据类型在生产环境下使用最多,同时也涵盖了绝大部分的场景。

除了基础的数据类型之外,还支持一些特殊的数据类型,用在一些特殊场景上:

  • stream(流)
  • geospatial(一种使用经纬度地理空间的数据类型,和 ES 中的 geo_point 字段类型相似)
  • bitmap(位图)
  • bitfields(位域)

对 string 类型的操作命令

string 除了可以存放基本的文本外,还可以存放数值、二进制图片、音频、视频、序列化对象等。请注意!默认情况下,单个 string 最大为 512MB

以下演示的都是使用文本或数值。

setget

# set 命令前面见过了,就是设置指定 key 的 value。
# 如果 key 不存在于当前库中,则创建一个新的 key-value
## 如果 key 已经存在于当前库中,则会将其值覆盖且无视数据类型
192.168.100.3:6379> exists cityname:1
(integer) 0
192.168.100.3:6379> set cityname:1  GZ
OK
192.168.100.3:6379> set cityname:1 new-value
OK
192.168.100.3:6379> get cityname:1
"new-value"
# set 命令除了基本的用法外,还支持一些额外的参数,用法为:
192.168.100.3:6379>  help set

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

NX 和 XX 是可选参数,控制 key 的行为。NX 表示如果这个 key 不存在,则才能成功设置 value 的值,用于添加 key 与 value;XX 表示如果 key 已经存在,则才能成功设置 value 的值,用于更新 key 的 value,示例如下:

192.168.100.3:6379> exists cityname:10
(integer) 0
192.168.100.3:6379> set cityname:10  wh NX
OK
192.168.100.3:6379> set cityname:10  gz NX
(nil)
192.168.100.3:6379> get cityname:10
"wh"
192.168.100.3:6379> set cityname:10  gz XX
OK

EX 和 PX 用于设置 key 的过期时间,这是在创建 key-value 时设置过期时间,EX 的单位为秒,PX 的单位为毫秒。如果要在已经存在的 key 上设置过期时间,请使用 expire 命令 和 pexpire 命令,示例如下:

192.168.100.3:6379> exists cityname:15
(integer) 0
192.168.100.3:6379> set cityname:15  ShangHai NX EX 200
OK
192.168.100.3:6379> ttl cityname:15
(integer) 191

# 如果 key 的 value 有空格或其他特殊字符,请使用双引号或单引号包含 value。
192.168.100.3:6379> exists redis:first
(integer) 0
192.168.100.3:6379> set redis:first "Hello World" ex 200
OK
192.168.100.3:6379> ttl redis:first 
(integer) 183

msetmsetnxmget

如果要一次性写入多个 key-value ,请使用 msetmsetnx 命令

# 当多个 key 都不存在时(只要有一个存在,就无法写入到 DB),也可以考虑使用 msetnx ,这样会更加安全
## mget 命令用来获取多个 key 的 value
192.168.100.3:6379> mset k1 v1 k2 v2 k3 v3
OK
192.168.100.3:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
192.168.100.3:6379> msetnx k4 v4 k5 v5 
OK

append

如果 key 是存在的, 对 key 的 value 进行追加,返回的是整个 value 的长度,如下示例:

192.168.100.3:6379> exists k4
(integer) 1
192.168.100.3:6379>  get k4
"v4"
192.168.100.3:6379> append k4 newstring
(integer) 11
192.168.100.3:6379> get k4
"v4newstring"

# 如果要对 value 加空格的话
192.168.100.3:6379> append k4 " n1"
(integer) 14
192.168.100.3:6379> get k4
"v4newstring n1"

incrdecr

对数值 value 自增或自减,每次的幅度为 1。命令返回的是自增或自减后的数值结果

192.168.100.3:6379> set number:1 10 NX
OK
192.168.100.3:6379> incr number:1
(integer) 11
192.168.100.3:6379> decr number:1
(integer) 10

如果要指定自增或自减的幅度,可以使用 incrbydecrby。请注意!幅度只可以是整数(正整数或负整数)

192.168.100.3:6379> incrby number:1 5
(integer) 15
192.168.100.3:6379> decrby  number:1 2
(integer) 13

incrbyfloat

对数值 value 自增或自减,幅度可以是正整数、负整数、正小数、负小数。

192.168.100.3:6379> incrbyfloat number:1  -1.6
"11.4"
192.168.100.3:6379> incrbyfloat number:1  2
"13.4"

strlen

获取 key 的 value 的字符长度。一个字母、一个数字的长度为1

192.168.100.3:6379> strlen number:1
(integer) 4

getrange

截取字符串的子字符串,用法为——getrange key start end

start 和 end 表示偏移量,负数的偏移量表示从字符串的最后开始计数。0 偏移量表示第一个字符、-1 偏移量表示最后一个字符,比如:

192.168.100.3:6379> get k4
"v4newstring n1"
192.168.100.3:6379> GETRANGE k4 0 0
"v"
192.168.100.3:6379> GETRANGE k4 0 3
"v4ne"
192.168.100.3:6379>  GETRANGE k4 0 -2
"v4newstring n"
192.168.100.3:6379> GETRANGE k4 -2 -1
"n1"

setrange

用用户指定的字符串替换 key 的一部分 value,用法为——setrange key offset value

offset 表示偏移量,0 偏移量表示从第一个字符开始替换,最长为 2^29 -1 (536870911)

# 比如要将"v4newstring n" 中的 new 替换为 NEW,可以执行以下命令:
## 返回的是字符长度
192.168.100.3:6379> setrange k4 2 NEW
(integer) 14
192.168.100.3:6379> get k4
"v4NEWstring n1"

# 字符串长度为14,即偏移量最大为13,如果偏移量设置为 17,会怎么样?在偏移量的 14、15、16处会使用 \x00 进行填充
192.168.100.3:6379> setrange k4 17 "123456"
(integer) 23
192.168.100.3:6379> get k4
"v4NEWstring n1\x00\x00\x00123456"
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇