Redis五大基本数据类型之String字符串类型

一、String 类型数据的基本操作

  1. append key value:在 key 对应的字符串后面追加 value,返回值为追加后的字符串的长度

    1. 如果当前 key 不存在,则此命令相当于set key value
      1. 127.0.0.1:6379> get name
      2. "hy"
      3. 127.0.0.1:6379> append name append
      4. (integer) 8
      5. 127.0.0.1:6379> keys *
      6. 1) "name"
      7. 127.0.0.1:6379> append test test
      8. (integer) 4
      9. 127.0.0.1:6379> keys *
      10. 1) "name"
      11. 2) "test"
  2. strlen key 获取当前 key 的字符串长度

    1. 127.0.0.1:6379> strlen name
    2. (integer) 8
  3. 自增自减

    1. incr key 使当前key的值自动加一

      1. 127.0.0.1:6379> set view 0
      2. OK
      3. 127.0.0.1:6379> incr view
      4. (integer) 1
    2. decr key使当前的 key 值自动减一

      1. 127.0.0.1:6379> decr view
      2. (integer) 0
    3. incrby key increment 设置当前 key 值增加 increment 对应的数值

      1. 127.0.0.1:6379> incrby view 10
      2. (integer) 10
    4. decrby key decrement 设置当前 key 值减少 decrement 对应的数值

      1. 127.0.0.1:6379> decrby view 5
      2. (integer) 5
    5. 对字符串进行自增自减时,会出现错误

      1. 127.0.0.1:6379> incr name
      2. (error) ERR value is not an integer or out of range
  4. getrange key start end 表示取出当前 key 对应的字符串从 start 到 end 的值

    1. 127.0.0.1:6379> get name
    2. "hyappend"
    3. 127.0.0.1:6379> getrange name 0 1
    4. "hy"
    5. 127.0.0.1:6379> getrange name 1 -1
    6. "yappend"
    1. end = -1 表示获取从 start 到字符串末尾的全部内容
  5. setrange key offset value 表示将 key 对应的字符串的第 offset 个字符替换为 value 对应的值

    1. 127.0.0.1:6379> get name
    2. "hyappend"
    3. 127.0.0.1:6379> setrange name 2 h
    4. (integer) 8
    5. 127.0.0.1:6379> get name
    6. "hyhppend"
  6. setex key time value:设置当前 key 在 time 秒后过期,值为 value

    1. 127.0.0.1:6379> setex key1 30 hello # 设置 key1 的值为 value 30s 后过期
    2. OK
    3. 127.0.0.1:6379> ttl key1
    4. (integer) 26
    5. 127.0.0.1:6379> get key1
    6. "hello"
    1. 30 秒后
      1. 127.0.0.1:6379> get key1 # 30s key1 失效,无法获取
      2. (nil)
  7. setnx key value:如果当前数据库中不存在当前 key,则将 key 和 value 存入

    1. 127.0.0.1:6379> setnx mykey redis # 如果 mykey 不在当前数据库中,则插入
    2. (integer) 1
    3. 127.0.0.1:6379> keys *
    4. 1) "view"
    5. 2) "name"
    6. 3) "mykey"
    7. 4) "test"
    8. 127.0.0.1:6379> setnx mykey mongodb # 已经存在时,无法插入,返回 0
    9. (integer) 0
    10. 127.0.0.1:6379> get mykey
    11. "redis"
    1. 返回值为 1 表示成功,为 0 表示当前数据库中已有该 key 存在,不能插入当前的 key 和 value
    2. 常用于分布式锁的设置
  8. mset [key1 value1 ... keyn valuen]批量插入多个 key-value 键值对

    1. 127.0.0.1:6379> flushdb
    2. OK
    3. 127.0.0.1:6379> keys *
    4. (empty list or set)
    5. 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
    6. OK
    7. 127.0.0.1:6379> keys *
    8. 1) "k3"
    9. 2) "k2"
    10. 3) "k1"
  9. mget [key1 ... keyn]批量获取值

    1. 127.0.0.1:6379> keys *
    2. 1) "k3"
    3. 2) "k2"
    4. 3) "k1"
    5. 127.0.0.1:6379> mget k1 k2 k3
    6. 1) "v1"
    7. 2) "v2"
    8. 3) "v3"
  10. msetnx [key1 value1 ... keyn valuen]在当前数据库不存在列表中所需插入的 keyi 时进行插入

    1. 若其中一个 key 已经在当前数据库中存在,则全部插入失败(是原子性操作,要么全部成功,要么全部失败)
      1. 127.0.0.1:6379> msetnx k1 v4 k5 v5
      2. (integer) 0
      3. 127.0.0.1:6379> get k1
      4. "v1"
      5. 127.0.0.1:6379> get k4
      6. (nil)
  11. getset key value:组合命令,先 get 再 set

    1. 127.0.0.1:6379> getset db redis
    2. (nil) # 不存在当前 key 则返回 null
    3. 127.0.0.1:6379> get db
    4. "redis"
    5. 127.0.0.1:6379> getset db mongodb
    6. "redis" # 如果存在值则取出原来的值,并设置新的值
    7. 127.0.0.1:6379> get db
    8. "mongodb"

    二、对象的相关操作

  12. set object:id {key1:value1,...,keyn:valuen}设置一个对象以及对应的对象的值

    1. 127.0.0.1:6379> set user:1 {name:xh,age:3}
    2. OK
    3. 127.0.0.1:6379> get user:1
    4. "{name:xh,age:3}"
  13. mset object:id:filed1 value1 ... object:id:filedn valuen通过 mset 为 id 对应的 object 设置属性值

    1. 这样做的妙处在于可以不用通过 json 格式为对象赋值,而是通过将 object:{id}:{filed}看做一个 key
      1. 127.0.0.1:6379> mset user:2:name n2 user:2:age 4
      2. OK
      3. 127.0.0.1:6379> mget user:2:name user:2:age
      4. 1) "n2"
      5. 2) "4"

      String 类型的使用场景

  14. value 除了可以是字符串以外,还可以是数字

    1. 用作计数器
    2. 网站的多单位统计数量
    3. 对象缓存存储(设置对象过期时间)