redis string 数据结构

String(字符串)

redis 主要包含 5 种数据结构,string 是 redis 最基本的类型,最大能存储 512MB,一个 key 对应一个 value,string 可以包含任何数据,包括数字、jpg图片或者序列化的对象。


常用 redis string 命令


  • set 命令:用于设置给定 key 的值,如果 key 已经存储其他值, set 就覆写旧值,且无视类型。
    NX:not exist 不存在就存入,相当于数据库中的插入操作
    XX:exist 存在就存入,相当于数据库中的更新操作
    基本语法
    127.0.0.1:6379> set key value [expiration EX seconds|PX milliseconds] [NX|XX]
    // 对不存在的 key 进行设置
    127.0.0.1:6379> set key "value"  // 引号可不写
    OK
    127.0.0.1:6379> get key
    "value"
    // 对已存在的 key 进行设置  
    127.0.0.1:6379> set key "newvalue" 
    OK
    127.0.0.1:6379> get key 
    "newvalue"
    
  • mset 命令:multiple set, 用于同时设置一个或多个 key-value 对。
    基本语法
    redis 127.0.0.1:6379> mset key value [key value ...]
    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
    "World"
    
  • setex 命令:set expiration,为指定的 key 设置值及其过期时间,如果 key 已经存在, SETEX 命令将会替换旧的值,key 的过期时间为 seconds (以秒为单位)。
    基本语法
    redis 127.0.0.1:6379> setex key seconds value
     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"
    
  • psetex 命令:以毫秒为单位设置 key 的生存时间。
    基本语法
    redis 127.0.0.1:6379> psetex key millisecond value
    redis 127.0.0.1:6379> psetex mykey 1000 "Hello"
    OK
    redis 127.0.0.1:6379> pttl mykey  // pttl 命令以毫秒为单位返回 key 的剩余过期时间
    999
    redis 127.0.0.1:6379> get mykey
    1) "Hello"
    
  • setnx 命令:set if not exists, 在指定的 key 不存在时,为 key 设置指定的值。
    基本语法
    redis 127.0.0.1:6379> setnx key value
    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"
    
  • msetnx 命令:用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对,当所有 key 都成功设置,返回 1 ,如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。原子性:要么成功执行,要么失败完全不执行
    基本语法
    redis 127.0.0.1:6379> msetnx key value [key value ...]
    // 对不存在的 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"
    
  • setrange 命令:用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始,返回被修改后的字符串长度,偏移量 offset 正向 0 ~ n,反向-1 ~ -n。
    redis string 数据结构_第1张图片基本语法
    redis 127.0.0.1:6379> setrange key offset value
    redis 127.0.0.1:6379> set name "Hello World"
    OK
    redis 127.0.0.1:6379> setrange name 6 "Redis"   // 在设定的key为name的字符串的第
    (integer) 11
    redis 127.0.0.1:6379> GET key1
    "Hello Redis"
    

  • get 命令:用于获取指定 key 的值,如果 key 不存在,返回 nil ,如果key 储存的值不是字符串类型,返回一个错误。
    基本语法
    127.0.0.1:6379> get key
    // 对不存在的 key 进行 get
    127.0.0.1:6379> get new
    (nil)
    127.0.0.1:6379> set new name  
    OK
    127.0.0.1:6379> get new
    "name"
    //  对不是字符串类型的 key 进行 get
    127.0.0.1:6379> lpush inner java c js
    (integer) 3
    127.0.0.1:6379> get inner
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    
  • getrange 命令:用于获取存储在指定 key 中字符串的子字符串,字符串的截取范围由 startend 两个偏移量决定(包括 start 和 end 在内)。
    基本语法
    127.0.0.1:6379> getrange key start end
    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 的值,并返回 key 的旧值。
    基本语法
    redis 127.0.0.1:6379> getset key value
    redis> getset mykey mongodb    # 没有旧值,返回 nil
    (nil)
    redis> getset mykey
    "mongodb"
    redis> getset mykey redis      # 返回旧值 mongodb
    "mongodb"
    redis> get mykey
    "redis"
    
  • mget 命令:返回所有(一个或多个)给定 key 的值,返回一个包含所有给定 key 的值的列表,如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
    基本语法
    redis 127.0.0.1:6379> mget key [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 undefi_Key
    1) "Hello"
    2) "World"
    3) (nil)
    
  • strlen 命令:string length,用于获取指定 key 所储存的字符串长度,返回字符串长度,当 key 储存的不是字符串时,返回 0 。
    基本语法
    redis 127.0.0.1:6379> strlen key
    redis> set mykey "Hello world"      # 获取存在的字符串的长度
    OK
    redis> strlen mykey
    (integer) 11
    redis> strlen nonexisting           # 不存在的 key 长度为 0
    (integer) 0
    

  • incr 命令:increase,将 key 中储存的数字值增 1,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incr 操作,如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
    基本语法
    redis> set page_view 20
    OK
    redis> incr page_view
    (integer) 21
    redis> get page_view    # 数字值在 Redis 中以字符串的形式保存
    "21"
    
  • incrby 命令:将 key 中储存的数字加上指定的增量值,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incrby 命令,如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
    基本语法
    redis 127.0.0.1:6379> incrby key increment
    redis> set rank 50    // key 存在且是数字值
    OK
    redis> incr rank 20
    (integer) 70
    redis> get rank
    "70"
    
    redis> exists counter // key 不存在时
    (integer) 0
    redis> incrby counter 30
    (integer) 30
    redis> get counter
    "30"
    
    redis> set book "long long ago..."   // key 不是数字值时
    OK  
    redis> incrby book 200
    (error) ERR value is not an integer or out of range
    
  • incrbyfloat 命令:为 key 中所储存的值加上指定的浮点数增量值,如果 key 不存在,那么 incrbyfloat 会先将 key 的值设为 0 ,再执行加法操作。
    基本语法
    redis 127.0.0.1:6379> incrbyfloat key increment
    # incrbyfloat 使用之后,再使用 incrby 会出现报错
    redis> set mykey 30
    OK
    redis> get mykey
    "30"
    redis> incrby mykey 20
    (integer) 50
    redis> get mykey
    "50"
    redis> incrbyfloat mykey 1.6
    51.6
    redis> get mykey
    "51.6"
    redis> incrby mykey 20
    (error) ERR value is not an integer or out of range  # err 报错
    // 值和增量都不是指数符号
    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"
    # incrbyfloat 会将无用的 0 忽略掉,有需要的话,将浮点变为整数
    redis> incrbyflaot mykey 1.000000000000000000000    
    "4"
    redis> get mykey
    "4"
    
  • decr 命令:decrease, 将 key 中储存的数字值减 1 ,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 decr 操作,如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
    基本语法
    redis 127.0.0.1:6379> decr key
    # decr 命令对存在的数字值 key 进行操作
    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 所储存的值减去指定的减量值,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作,如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
    基本语法
    redis 127.0.0.1:6379> decrby key increment
    // 对已存在的 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 追加值,如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾,如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一样。追加指定值之后, key 中字符串的长度。
    基本语法
    redis 127.0.0.1:6379> append key value
    // 对不存在的 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"
    

你可能感兴趣的:(Redis)