• Redis教程8-字符串(String)常用命令使用参考1


    1.APPEND

    APPEND key value

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

    如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

    可用版本:>= 2.0.0

    时间复杂度:平摊O(1)

    返回值:

    追加 value 之后, key 中字符串的长度。

    localhost:6379> exists name    // name不存在
    (integer) 0
    localhost:6379> append name redis666    // append不存在的key, 等同于set key value
    (integer) 8
    localhost:6379> get name
    "redis666"
    localhost:6379> append name redis888    // name存在
    (integer) 16
    localhost:6379> get name
    "redis666redis888"
    localhost:6379>

    2.DECR

    DECR key

    将 key 中储存的数字值减一。

    如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。

    如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

    本操作的值限制在 64 位(bit)有符号数字表示之内。

    关于递增(increment) / 递减(decrement)操作的更多信息,请参见 INCR 命令。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:

    执行 DECR 命令之后 key 的值。

    localhost:6379> set name redis666
    OK
    localhost:6379> set age 66
    OK
    localhost:6379> decr age    // decr存在key
    (integer) 65
    localhost:6379> exists tel
    (integer) 0
    localhost:6379> decr tel    // decr不存在的key
    (integer) -1
    localhost:6379> exists tel
    (integer) 1
    localhost:6379> decr name    // decr存在但类型不匹配的key
    (error) ERR value is not an integer or out of range
    localhost:6379>

    3.DECRBY

    DECRBY key decrement

    将 key 所储存的值减去减量 decrement 。

    如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。

    如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

    本操作的值限制在 64 位(bit)有符号数字表示之内。

    关于更多递增(increment) / 递减(decrement)操作的更多信息,请参见 INCR 命令。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:

    减去 decrement 之后, key 的值。

    localhost:6379> set name redis666
    OK
    localhost:6379> set age 60
    OK
    localhost:6379> decrby age 10    // key存在
    (integer) 50
    localhost:6379> exists tel
    (integer) 0
    localhost:6379> decrby tel 20    // key不存在
    (integer) -20
    localhost:6379> exists tel
    (integer) 1
    localhost:6379> decrby name 10    // key存在类型不匹配
    (error) ERR value is not an integer or out of range
    localhost:6379>

    4.GET

    GET key

    返回 key 所关联的字符串值。

    如果 key 不存在那么返回特殊值 nil 。

    假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:

    当 key 不存在时,返回 nil ,否则,返回 key 的值。
    如果 key 不是字符串类型,那么返回一个错误。
    localhost:6379> get age    // 对不存在的key进行get
    (nil)
    localhost:6379> set name redis666
    OK
    localhost:6379> get name
    "redis666"
    localhost:6379> lpush ages 11 22 33
    (integer) 3
    localhost:6379> get ages    // 对不是string的key进行get
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    localhost:6379>

    5.GETRANGE

    GETRANGE key start end

    返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

    负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。

    GETRANGE 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。

    在 <= 2.0 的版本里,GETRANGE 被叫作 SUBSTR。

    可用版本:>= 2.4.0

    时间复杂度:

    O(N), N 为要返回的字符串的长度。
    复杂度最终由字符串的返回值长度决定,但因为从已有字符串中取出子字符串的操作非常廉价(cheap),所以对于长度不大的字符串,该操作的复杂度也可看作O(1)。
    返回值:截取得出的子字符串。
    localhost:6379> set name ABCDEFG
    OK
    localhost:6379> getrange name 0 5    // 获取索引从0到5的子字符串
    "ABCDEF"
    localhost:6379> getrange name 0 -1    // 获取索引从0到最后一个的
    "ABCDEFG"
    localhost:6379> getrange name 0 100    // 值域范围不超过实际字符串,超过部分自动被符略
    "ABCDEFG"
    localhost:6379> getrange name -1 -5    // 不支持倒着的操作
    ""
    localhost:6379> getrange name -2 3    // 不支持
    ""
    localhost:6379> getrange name -3 -1    // 从倒数第3个字符到最后一个
    "EFG"
    localhost:6379> getrange name -1 -1    // 最后一个字符
    "G"
    localhost:6379>

    6.GETSET

    GETSET key value

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

    当 key 存在但不是字符串类型时,返回一个错误。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:

    返回给定 key 的旧值。
    当 key 没有旧值时,也即是, key 不存在时,返回 nil 。
    localhost:6379> exists name    // key不存在
    (integer) 0
    localhost:6379> getset name redis888    // getset返回nil
    (nil)
    localhost:6379> exists name
    (integer) 1
    localhost:6379> get name    // name就是getset的结果
    "redis888"
    localhost:6379> getset name redis666    // 再次getset, 返回旧值
    "redis888"
    localhost:6379> get name    // name值被覆盖
    "redis666"
    localhost:6379> lpush ages 11 22 33
    (integer) 3
    localhost:6379> getset ages 44    // getset不匹配的类型, 报错!
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    localhost:6379>

    7.INCR

    INCR key

    将 key 中储存的数字值增一。

    如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

    如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

    本操作的值限制在 64 位(bit)有符号数字表示之内。

    这是一个针对字符串的操作,因为 Redis 没有专用的整数类型,所以 key 内储存的字符串被解释为十进制 64 位有符号整数来执行 INCR 操作。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:执行 INCR 命令之后 key 的值。

    具体操作同上的命令 2.DECR 命令...不做多余实例, 参考DECR

    8.INCRBY

    INCRBY key increment

    将 key 所储存的值加上增量 increment 。

    如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。

    如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

    本操作的值限制在 64 位(bit)有符号数字表示之内。

    关于递增(increment) / 递减(decrement)操作的更多信息,参见 INCR 命令。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:加上 increment 之后, key 的值。

    具体操作同上的命令 3.DECRBY 命令...不做多余实例, 参考DECRBY

    9.INCRBYFLOAT

    INCRBYFLOAT key increment

    为 key 中所储存的值加上浮点数增量 increment 。

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

    如果命令执行成功,那么 key 的值会被更新为(执行加法之后的)新值,并且新值会以字符串的形式返回给调用者。

    无论是 key 的值,还是增量 increment ,都可以使用像 2.0e7 、 3e5 、 90e-2 那样的指数符号(exponential notation)来表示,但是,执行 INCRBYFLOAT 命令之后的值总是以同样的形式储存,也即是,它们总是由一个数字,一个(可选的)小数点和一个任意位的小数部分组成(比如 3.14 、 69.768 ,诸如此类),小数部分尾随的 0 会被移除,如果有需要的话,还会将浮点数改为整数(比如 3.0 会被保存成 3 )。

    除此之外,无论加法计算所得的浮点数的实际精度有多长, INCRBYFLOAT 的计算结果也最多只能表示小数点的后十七位。

    当以下任意一个条件发生时,返回一个错误:

    • key 的值不是字符串类型(因为 Redis 中的数字和浮点数都以字符串的形式保存,所以它们都属于字符串类型)
    • key 当前的值或者给定的增量 increment 不能解释(parse)为双精度浮点数(double precision floating point number)

    可用版本:>= 2.6.0

    时间复杂度:O(1)

    返回值:执行命令之后 key 的值。

    # 值和增量都不是指数符号
    
    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"
  • 相关阅读:
    闭包装饰器与递归
    内置函数学习
    可迭代对象 迭代器 生成器 推导式 匿名函数
    函数基础
    python文件操作
    深浅copy与小数据池
    python数据类型
    python基础语法
    view视图函数的书写 请求与响应相关
    LeetCode OJ:Rotate Image(旋转图片)
  • 原文地址:https://www.cnblogs.com/no-celery/p/13704086.html
Copyright © 2020-2023  润新知