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 1O(1)
DECR key等同于执行 DECRBY key 1O(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"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值