zoukankan      html  css  js  c++  java
  • Redis教程8-字符串(String)常用命令使用参考2

    1.MGET

    MGET key [key ...]

    返回所有(一个或多个)给定 key 的值。

    如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。

    可用版本:>= 1.0.0

    时间复杂度:O(N) , N 为给定 key 的数量。

    返回值:一个包含所有给定 key 的值的列表。

    127.0.0.1:6379> mget name age    // name和age都不存在, 都返回nil
    1) (nil)
    2) (nil)
    127.0.0.1:6379> set name redis666    
    OK
    127.0.0.1:6379> mget name age    // age不存在, 返回nil
    1) "redis666"
    2) (nil)
    127.0.0.1:6379> set age 60
    OK
    127.0.0.1:6379> mget name age    // name和age都存在
    1) "redis666"
    2) "60"
    127.0.0.1:6379>

    2.MSET

    MSET key value [key value ...]

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

    如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用接下来的 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。

    MSET 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。

    可用版本:>= 1.0.1

    时间复杂度:O(N), N 为要设置的 key 数量。

    返回值:总是返回 OK (因为 MSET 不可能失败)

    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379>
    127.0.0.1:6379> set name redis666    // 设置name
    OK
    127.0.0.1:6379> mset name redis888 age 18 tel 111112222
    OK
    127.0.0.1:6379> keys *
    1) "age"
    2) "name"
    3) "tel"
    127.0.0.1:6379> get name    // name被覆盖了
    "redis888"
    127.0.0.1:6379>

    3.MSETNX

    MSETNX key value [key value ...]

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

    即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。

    MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。

    可用版本:>= 1.0.1

    时间复杂度:O(N), N 为要设置的 key 的数量。

    返回值:

    当所有 key 都成功设置,返回 1 。
    如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。
    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379> set name redis666  // name存在
    OK
    127.0.0.1:6379> msetnx name redis888 age 18 tel 11223344    // 因为name的存在, 遵循原子性, 所有操作失败
    (integer) 0
    127.0.0.1:6379> keys *
    1) "name"
    127.0.0.1:6379> get name
    "redis666"
    127.0.0.1:6379> msetnx age 18 tel 11223344    // age和tel都不存在, 操作成功
    (integer) 1
    127.0.0.1:6379> keys *
    1) "age"
    2) "name"
    3) "tel"
    127.0.0.1:6379>

    4.PSETEX

    PSETEX key milliseconds value

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

    可用版本:>= 2.6.0

    时间复杂度:O(1)

    返回值:设置成功时返回 OK 。

    127.0.0.1:6379> psetex name 10000 redis666    // 设置key存在1000ms
    OK
    127.0.0.1:6379> ttl name
    (integer) 7
    127.0.0.1:6379> get name
    "redis666"
    127.0.0.1:6379> pttl name
    (integer) 1639
    127.0.0.1:6379> ttl name
    (integer) -2
    127.0.0.1:6379> exists name
    (integer) 0

    5.SET

    SET key value [EX seconds] [PX milliseconds] [NX|XX]

    将字符串值 value 关联到 key 。

    如果 key 已经持有其他值, SET 就覆写旧值,无视类型。

    对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

    可选参数

    从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:

    • EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
    • PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。
    • NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
    • XX :只在键已经存在时,才对键进行设置操作。
    因为 SET 命令可以通过参数来实现和 SETNX 、 SETEX 和 PSETEX 三个命令的效果,所以将来的 Redis 版本可能会废弃并最终移除 SETNX 、 SETEX 和 PSETEX 这三个命令。
    # 对不存在的键进行设置
    
    redis 127.0.0.1:6379> SET key "value"
    OK
    
    redis 127.0.0.1:6379> GET key
    "value"
    
    
    # 对已存在的键进行设置
    
    redis 127.0.0.1:6379> SET key "new-value"
    OK
    
    redis 127.0.0.1:6379> GET key
    "new-value"
    
    
    # 使用 EX 选项
    
    redis 127.0.0.1:6379> SET key-with-expire-time "hello" EX 10086
    OK
    
    redis 127.0.0.1:6379> GET key-with-expire-time
    "hello"
    
    redis 127.0.0.1:6379> TTL key-with-expire-time
    (integer) 10069
    
    
    # 使用 PX 选项
    
    redis 127.0.0.1:6379> SET key-with-pexpire-time "moto" PX 123321
    OK
    
    redis 127.0.0.1:6379> GET key-with-pexpire-time
    "moto"
    
    redis 127.0.0.1:6379> PTTL key-with-pexpire-time
    (integer) 111939
    
    
    # 使用 NX 选项
    
    redis 127.0.0.1:6379> SET not-exists-key "value" NX
    OK      # 键不存在,设置成功
    
    redis 127.0.0.1:6379> GET not-exists-key
    "value"
    
    redis 127.0.0.1:6379> SET not-exists-key "new-value" NX
    (nil)   # 键已经存在,设置失败
    
    redis 127.0.0.1:6379> GEt not-exists-key
    "value" # 维持原值不变
    
    
    # 使用 XX 选项
    
    redis 127.0.0.1:6379> EXISTS exists-key
    (integer) 0
    
    redis 127.0.0.1:6379> SET exists-key "value" XX
    (nil)   # 因为键不存在,设置失败
    
    redis 127.0.0.1:6379> SET exists-key "value"
    OK      # 先给键设置一个值
    
    redis 127.0.0.1:6379> SET exists-key "new-value" XX
    OK      # 设置新值成功
    
    redis 127.0.0.1:6379> GET exists-key
    "new-value"
    
    
    # NX 或 XX 可以和 EX 或者 PX 组合使用
    
    redis 127.0.0.1:6379> SET key-with-expire-and-NX "hello" EX 10086 NX
    OK
    
    redis 127.0.0.1:6379> GET key-with-expire-and-NX
    "hello"
    
    redis 127.0.0.1:6379> TTL key-with-expire-and-NX
    (integer) 10063
    
    redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "old value"
    OK
    
    redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "new value" PX 123321
    OK
    
    redis 127.0.0.1:6379> GET key-with-pexpire-and-XX
    "new value"
    
    redis 127.0.0.1:6379> PTTL key-with-pexpire-and-XX
    (integer) 112999
    
    
    # EX 和 PX 可以同时出现,但后面给出的选项会覆盖前面给出的选项
    
    redis 127.0.0.1:6379> SET key "value" EX 1000 PX 5000000
    OK
    
    redis 127.0.0.1:6379> TTL key
    (integer) 4993  # 这是 PX 参数设置的值
    
    redis 127.0.0.1:6379> SET another-key "value" PX 5000000 EX 1000
    OK
    
    redis 127.0.0.1:6379> TTL another-key
    (integer) 997   # 这是 EX 参数设置的值
    View Code

    6.SETEX

    SETEX key seconds value

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

    如果 key 已经存在, SETEX 命令将覆写旧值。

    这个命令类似于以下两个命令:

    SET key value
    EXPIRE key seconds  # 设置生存时间

    不同之处是, SETEX 是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。

    可用版本:>= 2.0.0

    时间复杂度:O(1)

    返回值:

    设置成功时返回 OK 。
    当 seconds 参数不合法时,返回一个错误。
    # 在 key 不存在时进行 SETEX
    
    redis> SETEX cache_user_id 60 1111
    OK
    
    redis> GET cache_user_id  # 值
    "1111"
    
    redis> TTL cache_user_id  # 剩余生存时间
    (integer) 49
    
    
    # key 已经存在时,SETEX 覆盖旧值
    
    redis> SET cd "timeless"
    OK
    
    redis> SETEX cd 3000 "goodbye my love"
    OK
    
    redis> GET cd
    "goodbye my love"
    
    redis> TTL cd
    (integer) 2997

    7.SETNX

    SETNX key value

    将 key 的值设为 value ,当且仅当 key 不存在。

    若给定的 key 已经存在,则 SETNX 不做任何动作。

    SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:

    设置成功,返回 1 。
    设置失败,返回 0 。
    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"

    8.SETRANGE

    SETRANGE key offset value

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

    不存在的 key 当作空白字符串处理。

    SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节(zerobytes, "x00" )来填充。

    注意你能使用的最大偏移量是 2^29-1(536870911) ,因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内。如果你需要使用比这更大的空间,你可以使用多个 key 。

    可用版本:>= 2.2.0

    时间复杂度:

    对小(small)的字符串,平摊复杂度O(1)。(关于什么字符串是”小”的,请参考 APPEND 命令)
    否则为O(M), M 为 value 参数的长度。
    返回值:被 SETRANGE 修改之后,字符串的长度。
    127.0.0.1:6379> set info 'hello redis666888'    
    OK
    127.0.0.1:6379> setrange info 11 world    // 对非空字符串进行 SETRANGE
    (integer) 17
    127.0.0.1:6379> get info
    "hello redisworld8"
    127.0.0.1:6379> setrange name 3 tom    // 对空 字符串/不存在 的key进行 SETRANGE
    (integer) 6
    127.0.0.1:6379> get name
    "x00x00x00tom"
    127.0.0.1:6379>

    9.STRLEN

    STRLEN key

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

    当 key 储存的不是字符串值时,返回一个错误。

    可用版本:>= 2.2.0

    复杂度:O(1)

    返回值:

    字符串值的长度。
    当 key 不存在时,返回 0 。
    # 获取字符串的长度
    
    redis> SET mykey "Hello world"
    OK
    
    redis> STRLEN mykey
    (integer) 11
    
    
    # 不存在的 key 长度为 0
    
    redis> STRLEN nonexisting
    (integer) 0
  • 相关阅读:
    自动化原理
    Appium 用途和特点
    接口测试
    测试环境部署
    总结一下,selenium 自动化流程如下
    Qt---tcp之网络通信
    java的接口与抽象类
    Leetcode---每日一题之56合并区间
    java与c++的正则表达式的小总结
    数据结构学习之线索二叉树(java/c++版)
  • 原文地址:https://www.cnblogs.com/no-celery/p/13705290.html
Copyright © 2011-2022 走看看