Redis入门之一 字符串(string)
Redis入门之一 字符串(string)
Redis 中最简单的数据结构,它既可以储存文字(比如 “hello world”),又可以储存数字(比如整数 10086 和浮点数 3.14),还可以储存二进制数据(比如 10010100)。Redis 为这几种类型的值分别设置了相应的操作命令,让用户可以针对不同的值做不同的处理。
一 基本操作
为字符串键设置值、获取字符串键的值、获取字符串值的长度,等等。
1.1 为字符串键设置值
1.1.1 SET key value
将字符串键 key 的值设置为 value ,命令返回 OK 表示设置成功。 如果字符串键 key 已经存在,那么用新值覆盖原来的旧值。复杂度为 O(1)
redis> SET msg "hello world" OK redis> SET msg "goodbye" # 覆盖原来的值 "hello world" OK
1.1.2 SET key value [NX|XX]
SET 命令还支持可选的 NX 选项和 XX 选项:
- 如果给定了 NX 选项,那么命令仅在*键 key 不存在*的情况下,才进行设置操作;如果键 key 已经存 在,那么 SET … NX 命令不做动作(不会覆盖旧值)。
如果给定了 XX 选项,那么命令仅在键 key 已经存在的情况下,才进行设置操作;如果键 key 不存 在,那么 SET … XX 命令不做动作(一定会覆盖旧值)。
在给定 NX 选项和 XX 选项的情况下,SET 命令在设置成功时返回 OK ,设置失败时返回 nil 。
redis> SET nx-str "this will fail" XX # 键不存在,指定 XX 选项导致设置失败 (nil) redis> SET nx-str "this will success" NX # 键不存在,所以指定 NX 选项是可行的 OK redis> SET nx-str "this will fail" NX # 键已经存在,指定 NX 选项导致设置失败 (nil) redis> SET nx-str "this will success again!" XX # 键已经存在,指定 XX 选项是可行的 OK
1.2 获取字符串的值
1.2.1 GET key
返回字符串键 key 储存的值。复杂度为 O(1) 。
redis> SET msg "hello world" OK redis> GET msg hello world redis> SET number 10086 OK redis> GET number 10086
1.3 仅在键不存在的情况下进行设置
1.3.1 SETNX key value
仅在键 key 不存在的情况下,将键 key 的值设置为 value ,效果和 SET key value NX 一样。 NX 的意思为“Not eXists”(不存在)。键不存在并且设置成功时,命令返回 1 ;因为键已经存在而导致设置失败时,命令返回 0 。复杂度为 O(1) 。
redis> SETNX new-key "i am a new key!" 1 redis> SETNX new-key "another new key here!" # 键已经存在,设置失败 0 redis> GET new-key # 键的值没有改变 i am a new key!
1.4 同时设置或获取多个字符串键的值
命令 | 效果 | 复杂度 |
---|---|---|
MSET key value [key value …] | 一次为一个或多个字符串键设置 值,效果和同时执行多个 SET 命 令一样。 命令返回 OK 。 | O(N),N 为要设置的字符串键 数量。 |
MGET key [key …] | 一次返回一个或多个字符串 键的 值,效果和同时执行多个 GET 命 令一样 | O(N),N 为要获取的字符串键 数量。 |
1.5 一次设置多个不存在的键
MSETNX key value [key value …]
只有在所有给定键都不存在的情况下, MSETNX 会为所有给定键设置值,效果和同时执行多个 SETNX 一样。如果给定的键至少有一个是存在的,那么 MSETNX 将不执行任何设置操作。
返回 1 表示设置成功,返回 0 表示设置失败。复杂度为 O(N) , N 为给定的键数量。
redis> MSETNX nx-1 "hello" nx-2 "world" nx-3 "good luck" 1 redis> SET ex-key "bad key here" OK redis> MSETNX nx-4 "apple" nx-5 "banana" ex-key "cherry" nx-6 "durian" 0
因为 ex-key 键已经存在,所以第二个 MSETNX 会执行失败,所有键都不会被设置。
1.6 设置新值并返回旧值
GETSET key new-value
将字符串键的值设置为 new-value ,并返回字符串键在设置新值之前储存的旧值(old value)。
复杂度为 O(1) 。
redis> SET getset-str "i'm old value" # 先给字符串键设置一个值 OK redis> GETSET getset-str "i'm new value" # 更新字符串键的值,并返回之前储存的旧值 i'm old value redis> GET getset-str # 确认一下,新值已被设置 i'm new value
用伪代码表示 GETSET 的定义
def GETSET(key, new-value): old-value = GET(key) # 记录旧值 SET(key, new-value) # 设置新值 return old-value # 返回旧值
1.7 追加内容到字符串末尾
APPEND key value
将值 value 推入到字符串键 key 已储存内容的末尾。O(N), 其中 N 为被推入值的长度
redis> SET myPhone "nokia" OK redis> APPEND myPhone "-1110" (integer) 10 redis> GET myPhone "nokia-1110"
二 数字操作
增加或者减少字符串键储存的数字值。
2.1 增加或者减少数字的值
对于一个保存着数字的字符串 键 key ,我们可以使用 INCRBY 命令来增加它的值,或者使用 DECRBY 命令来减少它的值
命令 | 效果 | 复杂度 |
---|---|---|
INCRBY key increment | 将 key 所储存的值加上增量 increment ,命 令返回操作执行之后,键 key 的当前值。 | O(1) |
DECRBY key decrement | 将 key 所储存的值减去减量 decrement ,命 令返回操作执行之后,键 key 的当前值。 | O(1) |
如果执行 INCRBY 或者 DECRBY 时,键 key 不存在,那么命令会将键 key 的 值初始化为 0 ,然后再执行增加或者减少操作
INCRBY / DECRBY 示例
redis> INCRBY num 100 # 键 num 不存在,命令先将 num 的值初始化为 0 ,# 然后再执行加 100 操作 (integer) 100 redis> INCRBY num 25 # 将值再加上 25 (integer) 125 redis> DECRBY num 10 # 将值减少 10 (integer) 115 redis> DECRBY num 50 # 将值减少 50 (integer) 65
增一和减一
命令 | 效果 | 复杂度 |
---|---|---|
INCR key | 等同于执行 INCRBY key 1 | O(1) |
DECR key | 等同于执行 DECRBY key 1 | O(1) |
redis> SET num 10 OK redis> INCR num (integer) 11 redis> DECR num (integer) 10
2.2 浮点数的自增和自减
INCRBYFLOAT key increment
为字符串键 key 储存的值加上浮点数增量 increment ,命令返回操作执行之后,键 key 的值。
没有相应的 DECRBYFLOAT ,但可以通过给定负值来达到 DECRBYFLOAT 的效果。
复杂度为 O(1) 。
redis> SET num 10 redis> INCRBYFLOAT num 3.14 "13.14" redis> INCRBYFLOAT num -2.04 # 通过传递负值来达到做减法的效果 "11.1"阅读更多
- 结合redis设计与实现的redis源码学习-8.2-t_string(字符串键)
- C#入门篇6-6:字符串操作 StringBiulder string char[]之间的转化
- Redis学习笔记之Redis字符串String(五)
- C#新手入门代码 在string字符串中找到指定字符的最大,最小索引值
- Redis简单入门二——对String类型操作
- Redis 数据类型之String(字符串)类型
- Redis数据类型之字符串(string)
- redis操作之字符串 string
- redis命令 ----redis字符串(string)-----(三)
- C#新手入门代码 截取string字符串中的一段用Substring
- Redis从零开始之redis命令--字符串(string)
- Redis常用命令入门1:字符串类型命令
- Redis 字符串(String)
- (二)Redis字符串String操作
- Redis源码学习——简单动态字符串SDS(Simple Dynamic String)
- Redis笔记3:数据类型之字符串(String)
- Redis 源码解析 string内部实现原理之简单动态字符串SDS
- Redis 与字符串(string)相关的命令
- Redis教程(二)字符串(String)类型
- redis基础简介(一)- string(字符串)、list(列表)