redis字符串操作命令

Redis 字符串(String)

Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:

语法

redis 127.0.0.1:6379> COMMAND KEY_NAME

实例

redis 127.0.0.1:6379> SET runoobkey redis
OK
redis 127.0.0.1:6379> GET runoobkey
"redis"

在以上实例中我们使用了 SETGET 命令,键为 runoobkey

Redis 字符串命令

下表列出了常用的 redis 字符串命令:

  • set key value:设置指定 key 的值

    • 语法:

      redis 127.0.0.1:6379> set key_name value
      
    • 可用版本:\>= 1.0.0

    • 返回值:

      • 在 Redis 2.6.12 以前版本, SET 命令总是返回 OK 。
      • 从 Redis 2.6.12 版本开始, SET 在设置操作成功完成时,才返回 OK 。
    • 实例:

      # 对不存在的键进行设置
      
      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"
      
  • get key:获取指定 key 的值。

    • 语法:

      redis 127.0.0.1:6379> gte key_name
      
    • 可用版本:\>= 1.0.0

    • 返回值:

      • 返回 key 的值,如果 key 不存在时,返回 nil
      • 如果 key 不是字符串类型,那么返回一个错误
    • 实例:

      # 对不存在的 key 或字符串类型 key 进行 GET
      
      redis> get db
      (nil)
      
      redis> set db redis
      OK
      
      redis> get db
      "redis"
      
      
      # 对不是字符串类型的 key 进行 GET
      
      redis> del db
      (integer) 1
      
      redis> lpush db redis mongodb mysql
      (integer) 3
      
      redis> get db
      (error) ERR Operation against a key holding the wrong kind of value
      
  • getrange key start end:返回 key 中字符串值的子字符

    • 字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

    • 语法:

      redis 127.0.0.1:6379> getrange key_name start end
      
    • 可用版本:\>= 2.4.0

    • 返回值:截取得到的子字符串。

    • 实例:

      • 首先,设置 mykey 的值并截取字符串。
      redis 127.0.0.1:6379> set mykey "This is my test key"
      OK
      redis 127.0.0.1:6379> getrange mykey 0 3
      "This"
      redis 127.0.0.1:6379> getrange mykey 0 -1
      "This is my test key"
      
  • getset key value:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

    • 语法:

      redis 127.0.0.1:6379> getset key_name value
      
    • 可用版本:\>= 1.0.0

    • 返回值:

      • 返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。
      • 当 key 存在但不是字符串类型时,返回一个错误。
    • 实例:

      • 首先,设置 mykey 的值并截取字符串。
      redis> getset db mongodb    # 没有旧值,返回 nil
      (nil)
      
      redis> get db
      "mongodb"
      
      redis> getset db redis      # 返回旧值 mongodb
      "mongodb"
      
      redis> get db
      "redis"
      
  • getbit key offset:对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

    • 语法:

      redis 127.0.0.1:6379> getbit key_name offset
      
    • 可用版本:\>= 2.2.0

    • 返回值:

      • 字符串值指定偏移量上的位(bit)。
      • 当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0 。
    • 实例:

      # 对不存在的 key 或者不存在的 offset 进行 getbit, 返回 0
      
      redis> exists bit
      (integer) 0
      
      redis> getbit bit 10086
      (integer) 0
      
      
      # 对已存在的 offset 进行 getbit
      
      redis> setbit bit 10086 1
      (integer) 0
      
      redis> getbit bit 10086
      (integer) 1
      
  • mget key1 [key2…:获取所有(一个或多个)给定 key 的值。

    • Redis Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。

    • 语法:

      redis 127.0.0.1:6379> mget key1 key2 .. keyn
      
    • 可用版本:\>= 1.0.0

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

    • 实例:

      redis 127.0.0.1:6379> set key1 "hello"
      OK
      redis 127.0.0.1:6379> set key2 "world"
      OK
      redis 127.0.0.1:6379> mget key1 key2 someOtherKey
      1) "Hello"
      2) "World"
      3) (nil)
      
  • setbit key offset value:对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

    • 语法:

      redis 127.0.0.1:6379> setbit KEY_NAME OFFSET
      
    • 可用版本:\>= 2.2.0

    • 返回值:指定偏移量原来储存的位。

    • 实例:

      redis> SETBIT bit 10086 1
      (integer) 0
      
      redis> GETBIT bit 10086
      (integer) 1
      
      redis> GETBIT bit 100   # bit 默认被初始化为 0
      (integer) 0
      
  • setex key seconds value:将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。

    • 语法:

      redis 127.0.0.1:6379> setex key_name timeout value
      
    • 可用版本:\>= 2.0.0

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

    • 实例:

      redis 127.0.0.1:6379> setex mykey 60 redis
      OK
      redis 127.0.0.1:6379> ttl mykey
      60
      redis 127.0.0.1:6379> get mykey
      "redis
      
  • setnx key value:只有在 key 不存在时设置 key 的值。

    • 语法:

      redis 127.0.0.1:6379> setnx KEY_NAME VALUE
      
    • 可用版本:\>= 1.0.0

    • 返回值:设置成功,返回 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"
      
  • setrange key offset value:用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。

    • 语法:

      redis 127.0.0.1:6379> setrange  KEY_NAME OFFSET VALUE
      
    • 可用版本:\>= 2.2.0

    • 返回值:被修改后的字符串长度。

    • 实例:

      redis 127.0.0.1:6379> set key1 "Hello World"
      OK
      redis 127.0.0.1:6379> setrange key1 6 "Redis"
      (integer) 11
      redis 127.0.0.1:6379> GET key1
      "Hello Redis"
      
  • strlen key:返回 key 所储存的字符串值的长度。

    • 语法:

      redis 127.0.0.1:6379> strlen  KEY_NAME
      
    • 可用版本:>= 2.2.0

    • 返回值:字符串值的长度。 当 key 不存在时,返回 0。

    • 实例:

      # 获取字符串的长度
      
      redis> SET mykey "Hello world"
      OK
      
      redis> strlen  mykey
      (integer) 11
      
      
      # 不存在的 key 长度为 0
      
      redis> strlen  nonexisting
      (integer) 0
      
  • mset key value [key value …:同时设置一个或多个 key-value 对

    • 语法:

      redis 127.0.0.1:6379> mset  key1 value1 key2 value2 .. keyN valueN 
      
    • 可用版本:\>= 1.0.1

    • 返回值:总是返回 OK 。

    • 实例:

      redis 127.0.0.1:6379> mset  key1 "Hello" key2 "World"
      OK
      redis 127.0.0.1:6379> GET key1
      "Hello"
      redis 127.0.0.1:6379> GET key2
      1) "World"
      
  • [msetnx key value key value …]:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

    • 语法:

      redis 127.0.0.1:6379> msetnx  key1 value1 key2 value2 .. keyN valueN 
      
    • 可用版本:\>= 1.0.1

    • 返回值:

      • 当所有 key 都成功设置,返回 1 。
      • 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。
    • 实例:

      # 对不存在的 key 进行 MSETNX
      
      redis> msetnx  rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
      (integer) 1
      
      redis> mget rmdbs nosql key-value-store
      1) "MySQL"
      2) "MongoDB"
      3) "redis"
      
      
      # MSET 的给定 key 当中有已存在的 key
      
      redis> MSETNX rmdbs "Sqlite" language "python"  # rmdbs 键已经存在,操作失败
      (integer) 0
      
      redis> EXISTS language                          # 因为 MSET 是原子性操作,language 没有被设置
      (integer) 0
      
      redis> GET rmdbs                                # rmdbs 也没有被修改
      "MySQL"
      
  • psetex key milliseconds value:这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

    • 语法:

      redis 127.0.0.1:6379> psetex  key1 EXPIRY_IN_MILLISECONDS value1 
      
    • 可用版本:\>= 2.6.0

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

    • 实例

      redis 127.0.0.1:6379> psetex  mykey 1000 "Hello"
      OK
      redis 127.0.0.1:6379> pttl mykey
      999
      redis 127.0.0.1:6379> GET mykey
      1) "Hello"
      
  • incr key:将 key 中储存的数字值增一。

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

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

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

    • 语法:

      redis 127.0.0.1:6379> incr  KEY_NAME 
      
    • 可用版本:\>= 1.0.0

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

    • 实例

      redis> SET page_view 20
      OK
      
      redis> incr  page_view
      (integer) 21
      
      redis> GET page_view    # 数字值在 Redis 中以字符串的形式保存
      "21"
      
  • incrby key increment:将 key 所储存的值加上给定的增量值(increment) 。

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

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

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

    • 语法:

      redis 127.0.0.1:6379> incrby  KEY_NAME INCR_AMOUNT
      
    • 可用版本:\>= 1.0.0

    • 返回值:加上指定的增量值之后, key 的值。

    • 实例

      # key 存在且是数字值
      
      redis> SET rank 50
      OK
      
      redis> incrby  rank 20
      (integer) 70
      
      redis> GET rank
      "70"
      
      
      # key 不存在时
      
      redis> EXISTS counter
      (integer) 0
      
      redis> incrby  counter 30
      (integer) 30
      
      redis> GET counter
      "30"
      
      
      # key 不是数字值时
      
      redis> SET book "long long ago..."
      OK
      
      redis> INCRBY book 200
      (error) ERR value is not an integer or out of range
      
  • incrbyfloat key increment:将 key 所储存的值加上给定的浮点增量值(increment)

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

    • 语法:

      redis 127.0.0.1:6379> incrbyfloat  KEY_NAME INCR_AMOUNT
      
    • 可用版本:\>= 2.6.0

    • 返回值:执行命令之后 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"
      
  • decr key:将 key 中储存的数字值减一。

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

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

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

    • 语法:

      redis 127.0.0.1:6379> decr  KEY_NAME 
      
    • 可用版本:\>= 1.0.0

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

    • 实例

      # 对存在的数字值 key 进行 DECR
      
      redis> SET failure_times 10
      OK
      
      redis> decr  failure_times
      (integer) 9
      
      
      # 对不存在的 key 值进行 DECR
      
      redis> EXISTS count
      (integer) 0
      
      redis> DECR count
      (integer) -1
      
      
      # 对存在但不是数值的 key 进行 DECR
      
      redis> SET company YOUR_CODE_SUCKS.LLC
      OK
      
      redis> DECR company
      (error) ERR value is not an integer or out of range
      
  • DECRBY key decrement:key 所储存的值减去给定的减量值(decrement) 。

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

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

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

    • 语法:

      redis 127.0.0.1:6379> DECRBY KEY_NAME DECREMENT_AMOUNT
      
    • 可用版本:\>= 1.0.0

    • 返回值:减去指定减量值之后, key 的值。

    • 实例

      # 对已存在的 key 进行 DECRBY
      
      redis> SET count 100
      OK
      
      redis> DECRBY count 20
      (integer) 80
      
      
      # 对不存在的 key 进行DECRBY
      
      redis> EXISTS pages
      (integer) 0
      
      redis> DECRBY pages 10
      (integer) -10
      
  • APPEND key value:如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

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

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

    • 语法

      redis 127.0.0.1:6379> APPEND KEY_NAME NEW_VALUE
      
    • 可用版本:\>= 2.0.0

    • 返回值:追加指定值之后, key 中字符串的长度。

    • 实例

      # 对不存在的 key 执行 APPEND
      
      redis> EXISTS myphone               # 确保 myphone 不存在
      (integer) 0
      
      redis> APPEND myphone "nokia"       # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
      (integer) 5                         # 字符长度
      
      
      # 对已存在的字符串进行 APPEND
      
      redis> APPEND myphone " - 1110"     # 长度从 5 个字符增加到 12 个字符
      (integer) 12
      
      redis> GET myphone
      "nokia - 1110"
      

更多命令请参考:https://redis.io/commands

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值