[关闭]
@Chiang 2019-12-26T18:06:01.000000Z 字数 5358 阅读 525

Redis 字符串(String)

Redis


set

Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

  1. # 对不存在的键进行设置
  2. redis 127.0.0.1:6379> SET key "value"
  3. OK
  4. redis 127.0.0.1:6379> GET key
  5. "value"
  6. # 对已存在的键进行设置
  7. redis 127.0.0.1:6379> SET key "new-value"
  8. OK
  9. redis 127.0.0.1:6379> GET key
  10. "new-value"

get

Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。

  1. # 对不存在的 key 或字符串类型 key 进行 GET
  2. redis> GET db
  3. (nil)
  4. redis> SET db redis
  5. OK
  6. redis> GET db
  7. "redis"
  8. # 对不是字符串类型的 key 进行 GET
  9. redis> DEL db
  10. (integer) 1
  11. redis> LPUSH db redis mongodb mysql
  12. (integer) 3
  13. redis> GET db
  14. (error) ERR Operation against a key holding the wrong kind of value

getrange

Redis Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

  1. redis 127.0.0.1:6379> SET mykey "This is my test key"
  2. OK
  3. redis 127.0.0.1:6379> GETRANGE mykey 0 3
  4. "This"
  5. redis 127.0.0.1:6379> GETRANGE mykey 0 -1
  6. "This is my test key"

getset

Redis Getset 命令用于设置指定 key 的值,并返回 key 的旧值。返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。
当 key 存在但不是字符串类型时,返回一个错误。

  1. redis> GETSET db mongodb # 没有旧值,返回 nil
  2. (nil)
  3. redis> GET db
  4. "mongodb"
  5. redis> GETSET db redis # 返回旧值 mongodb
  6. "mongodb"
  7. redis> GET db
  8. "redis"

getbit

Redis Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

  1. # 对不存在的 key 或者不存在的 offset 进行 GETBIT, 返回 0
  2. redis> EXISTS bit
  3. (integer) 0
  4. redis> GETBIT bit 10086
  5. (integer) 0
  6. # 对已存在的 offset 进行 GETBIT
  7. redis> SETBIT bit 10086 1
  8. (integer) 0
  9. redis> GETBIT bit 10086
  10. (integer) 1

mget

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

  1. redis 127.0.0.1:6379> SET key1 "hello"
  2. OK
  3. redis 127.0.0.1:6379> SET key2 "world"
  4. OK
  5. redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
  6. 1) "Hello"
  7. 2) "World"
  8. 3) (nil)

setbit

  • Redis Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
  • 返回值:指定偏移量原来储存的位。
  1. redis> SETBIT bit 10086 1
  2. (integer) 0
  3. redis> GETBIT bit 10086
  4. (integer) 1
  5. redis> GETBIT bit 100 # bit 默认被初始化为 0
  6. (integer) 0

setex

Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。

  1. redis 127.0.0.1:6379> SETEX mykey 60 redis
  2. OK
  3. redis 127.0.0.1:6379> TTL mykey
  4. 60
  5. redis 127.0.0.1:6379> GET mykey
  6. "redis"

setnx

Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。

  1. redis> EXISTS job # job 不存在
  2. (integer) 0
  3. redis> SETNX job "programmer" # job 设置成功
  4. (integer) 1
  5. redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败
  6. (integer) 0
  7. redis> GET job # 没有被覆盖
  8. "programmer"

setrange

Redis Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。

  1. redis 127.0.0.1:6379> SET key1 "Hello World"
  2. OK
  3. redis 127.0.0.1:6379> SETRANGE key1 6 "Redis"
  4. (integer) 11
  5. redis 127.0.0.1:6379> GET key1
  6. "Hello Redis"

strlen

Redis Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。

  1. # 获取字符串的长度
  2. redis> SET mykey "Hello world"
  3. OK
  4. redis> STRLEN mykey
  5. (integer) 11
  6. # 不存在的 key 长度为 0
  7. redis> STRLEN nonexisting
  8. (integer) 0

mset

Redis Mset 命令用于同时设置一个或多个 key-value 对。

  1. redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
  2. OK
  3. redis 127.0.0.1:6379> GET key1
  4. "Hello"
  5. redis 127.0.0.1:6379> GET key2
  6. 1) "World"

msetnx

Redis Msetnx 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。当所有 key 都成功设置,返回 1 。 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。

  1. # 对不存在的 key 进行 MSETNX
  2. redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
  3. (integer) 1
  4. redis> MGET rmdbs nosql key-value-store
  5. 1) "MySQL"
  6. 2) "MongoDB"
  7. 3) "redis"
  8. # MSET 的给定 key 当中有已存在的 key
  9. redis> MSETNX rmdbs "Sqlite" language "python" # rmdbs 键已经存在,操作失败
  10. (integer) 0
  11. redis> EXISTS language # 因为 MSET 是原子性操作,language 没有被设置
  12. (integer) 0
  13. redis> GET rmdbs # rmdbs 也没有被修改
  14. "MySQL"

psetex

Redis Psetex 命令以毫秒为单位设置 key 的生存时间。

  1. redis 127.0.0.1:6379> PSETEX mykey 1000 "Hello"
  2. OK
  3. redis 127.0.0.1:6379> PTTL mykey
  4. 999
  5. redis 127.0.0.1:6379> GET mykey
  6. 1) "Hello"

incr

Redis Incr 命令将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。

  1. redis> SET page_view 20
  2. OK
  3. redis> INCR page_view
  4. (integer) 21
  5. redis> GET page_view # 数字值在 Redis 中以字符串的形式保存
  6. "21"

incrby

Redis Incrby 命令将 key 中储存的数字加上指定的增量值。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。

  1. # key 存在且是数字值
  2. redis> SET rank 50
  3. OK
  4. redis> INCRBY rank 20
  5. (integer) 70
  6. redis> GET rank
  7. "70"
  8. # key 不存在时
  9. redis> EXISTS counter
  10. (integer) 0
  11. redis> INCRBY counter 30
  12. (integer) 30
  13. redis> GET counter
  14. "30"
  15. # key 不是数字值时
  16. redis> SET book "long long ago..."
  17. OK
  18. redis> INCRBY book 200
  19. (error) ERR value is not an integer or out of range

incrbyfloat

Redis Incrbyfloat 命令为 key 中所储存的值加上指定的浮点数增量值。
如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

  1. # 值和增量都不是指数符号
  2. redis> SET mykey 10.50
  3. OK
  4. redis> INCRBYFLOAT mykey 0.1
  5. "10.6"
  6. # 值和增量都是指数符号
  7. redis> SET mykey 314e-2
  8. OK
  9. redis> GET mykey # 用 SET 设置的值可以是指数符号
  10. "314e-2"
  11. redis> INCRBYFLOAT mykey 0 # 但执行 INCRBYFLOAT 之后格式会被改成非指数符号
  12. "3.14"
  13. # 可以对整数类型执行
  14. redis> SET mykey 3
  15. OK
  16. redis> INCRBYFLOAT mykey 1.1
  17. "4.1"
  18. # 后跟的 0 会被移除
  19. redis> SET mykey 3.0
  20. OK
  21. redis> GET mykey # SET 设置的值小数部分可以是 0
  22. "3.0"
  23. redis> INCRBYFLOAT mykey 1.000000000000000000000 # 但 INCRBYFLOAT 会将无用的 0 忽略掉,有需要的话,将浮点变为整数
  24. "4"
  25. redis> GET mykey
  26. "4"

decr

Redis Decr 命令将 key 中储存的数字值减一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。

  1. # 对存在的数字值 key 进行 DECR
  2. redis> SET failure_times 10
  3. OK
  4. redis> DECR failure_times
  5. (integer) 9
  6. # 对不存在的 key 值进行 DECR
  7. redis> EXISTS count
  8. (integer) 0
  9. redis> DECR count
  10. (integer) -1
  11. # 对存在但不是数值的 key 进行 DECR
  12. redis> SET company YOUR_CODE_SUCKS.LLC
  13. OK
  14. redis> DECR company
  15. (error) ERR value is not an integer or out of range

decrby

Redis Decrby 命令将 key 所储存的值减去指定的减量值。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。

  1. # 对已存在的 key 进行 DECRBY
  2. redis> SET count 100
  3. OK
  4. redis> DECRBY count 20
  5. (integer) 80
  6. # 对不存在的 key 进行DECRBY
  7. redis> EXISTS pages
  8. (integer) 0
  9. redis> DECRBY pages 10
  10. (integer) -10

append

Redis Append 命令用于为指定的 key 追加值。
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

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

参考资料:
Redis 字符串(String)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注