#Redis 基础 # 数据类型

332 阅读16分钟

基本

Redis 命令不区分大小

基础命令

  • keys
    • 命令含义:查找所有符合给定模式pattern(正则表达式)的 key
    • 命令格式:KEYS pattern
  • exists
    • 命令含义:返回key是否存在
    • 命令格式:EXISTS key [key ...]
      • 返回 1 表示存在。
  • expire
    • 命令含义:设置key的过期时间,超过时间后,将会自动删除该key
    • 命令格式:EXPIRE key seconds
      • 如果 key 存在且未过期,再次执行可以刷新过期时间
      • seconds 单位为秒。
  • ttl
    • 命令含义:返回key剩余的过期时间
    • 命令格式:TTL key
      • 如果 key 不存在或已过期,返回 -2
      • 如果 key 存在且没有设置过期时间,返回 -1
  • move
    • 命令含义:将当前数据库的 key 移动到给定的数据库 db 当中
    • 命令格式:MOVE key db
      • 如果目标数据库中有给定的 key,或者 key 不存在于当前数据库,即 move 不会生效
  • type
    • 命令含义:返回 key 所存储的 value 的数据结构类型,它可以返回 string, list, set, zsethash 等不同的类型
    • 命令格式:TYPE key
  • persist
    • 命令含义:移除给定 key 的过期时间
    • 命令格式:PERSIST key
  • del
    • 命令含义:删除指定的一批 keys ,如果删除中的某些 key 不存在,则直接忽略
    • 命令格式:DEL key [key ...]

字符串 String

命令

  • SET
    • 命令含义:将键 key 设定为指定的“字符串”值
    • 命令格式:SET key value [EX seconds] [PX milliseconds] [NX|XX]
      • 如果 key 已存在,直接覆盖
      • 如果有过期时间,会刷新
      • EX 表示过期时间以为单位
      • PX 表示过期时间以毫秒为单位
      • NX 表示只有 key 不存在时才设置 key 的值
      • XX 表示只有 key 存在时才设置 key 的值
    • 注意
      • 由于 SET 命令加上选项已经可以完全取代 SETNX, SETEX, PSETEX 的功能,所以在将来的版本中,redis 可能会不推荐使用并且最终抛弃这几个命令
  • GET
    • 命令含义:返回 keyvalue
    • 命令格式:GET key
      • 如果 key 不存在,返回 nil
      • 如果 keyvalue 不是 string , 返回错误。
  • GETRANGE
    • 命令含义:获取字符串的子字符串
    • 命令格式:GETRANGE key start end
      • startend 可以为正数或负数。正数即从左边开始计算,负数即从右边开始计算。-1 就是最后一个字符,-2 就是倒数第二个。
  • GETset
    • 命令含义:先获取 key 的旧值,然后给 key 设置新值
    • 命令格式:GETSET key newvalue
      • newvalue 表示新值
  • APPEND
    • 命令含义:追加 value 到原本 value 的末尾
    • 命令格式:APPEND key value
      • 如果 key 存在,则在原值尾部追加值
      • 如果 key 不存在,则新建 key 然后执行追加操作
  • SETRANGE
    • 命令含义:覆盖对应 keyvalue 值的指定区间
    • 命令格式:SETRANGE key offset value
      • 如果 offset 偏移量超过现有 string 值的长度,则需要补够 0 值以达到 offsetoffset 最大长度为 229=5368709112^{29} = 536870911

        image.png

  • STRLEN
    • 命令含义:返回 keystring 类型 value 的长度
    • 命令格式:STRLEN key
      • keystring 类型,会返回错误
  • SETNX
    • 命令含义:将 key 设置值为 value ,如果 key 不存在,这种情况下等同 SET 命令。 当 key 存在时,什么也不做SETNX 是 “SET if Not eXists” 的简写。
    • 命令格式:SETNX key value
  • SETEX
    • 命令含义:设置 key 对应字符串 value ,并且设置 key 在给定的 seconds 时间之后超时过期
    • 命令格式:SETEX key seconds value
  • INCR
    • 命令含义:对存储在指定 key 的数值执行原子的加1操作
    • 命令格式:INCR key
      • 如果指定的 key 不存在,那么在执行 incr 操作之前,会先将它的值设定为 0
      • 如果指定 key 存在,但是值不是字符类型或值不能表示为整数,即返回错误
      • 这个操作仅限于 64 位的有符号整型数据
  • INCRBY
    • 命令含义:将 key 对应的数字加上指定步长 decrement
    • 命令格式:INCRBY key increment
      • key 不存在,即会先设置成 0
      • key 存在但不是数字型的字符,即返回错误
      • 操作最多支持 64 位有符号的正型数字
  • DECR
    • 命令含义:对 key 对应的数字做减 1 操作
    • 命令格式:DECR key
  • DECRBY
    • 命令含义:将 key 对应的数字减去指定步长 decrement
    • 命令格式:DECRBY key decrement

列表 List

命令

image.png

  • LPUSH
    • 命令含义:往列表左边第一个位置插入值(列表不存在,会自动创建新列表)
    • 命令格式:LPUSH key element1 element2 element3
  • RPUSH
    • 命令含义:往列表右边第一个位置插入值(列表不存在,会自动创建新列表)
    • 命令格式:RPUSH key element1 element2 element3
  • LPUSHX
    • 命令含义:当列表存在时,往列表左边第一个位置插入值
    • 命令格式:LPUSHX key element1 element2 element3
  • RPUSHX
    • 命令含义:当列表存在时,往列表右边第一个位置插入值
    • 命令格式:RPUSHX key element1 element2 element3
  • LPOP
    • 命令含义:弹出列表左边第一个位置的元素
    • 命令格式:LPOP key
      • key 不存在时,返回 nil
  • RPOP
    • 命令含义:弹出列表右边第一个位置的元素
    • 命令格式:RPOP key
      • key 不存在时,返回 nil
  • BLPOP
    • 命令含义:阻塞式列表。如果给定的 key 至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,并和被弹出元素所属的列表的名字 key 一起,组成结果返回给调用者。如果给定的 key 不存在或包含空列表,BLPOP阻塞连接,直到有另一个客户端对给定的这些 key 的任意一个执行 LPUSHRPUSH 命令为止
    • 命令格式:BLPOP list1 list2 list3 timeout
      • 如果 list1 为空,list2 不为空,那么会返回list2 的第一个元素和list2 名;
      • 如果 list1 list2 list3 均为空或不存在,那么会发起阻塞,等待列表插入元素
      • timeout 用于设置阻塞时长的非零的超时参数。当timeout=0 时,阻塞时间无限制。
  • BRPOP
    • 命令含义:含义同 BLPOP 一致。区别在于从列表的尾部(右边)开始弹出元素
    • 命令格式:BRPOP list1 list2 list3 timeout
      • list1 > list2 > list3 顺序开始检查非空列表,如果 list1 为空,list2 不为空,即返回 list2 尾部的第一个元素
  • LRANGE
    • 命令含义:返回列表中指定范围内的元素。
    • 命令格式:LRANGE key start end
      • startend 都是基于 0 开始的偏移量。
      • startend 可以是负数-1 表示列表的最后一个元素,-2 是倒数第二元素。
        • 如: LRANGE mylist 0 -1 表示输出列表的所有元素
  • LINDEX
    • 命令含义:返回列表中指定下标的值,下标从 0 开始索引。
    • 命令格式:LINDEX key index
      • key 不是一个列表时,返回 error
      • index 可以为负数。-1 表示最后一个元素,-2 表示倒数第二个元素
  • LLEN
    • 命令含义:返回列表的长度。
    • 命令格式:LLEN key
      • key 不存在时,返回 0
      • key 存在,但不是列表时, 返回 error
  • LREM
    • 命令含义:从列表中移除指定数量的特定元素
    • 命令格式:LREM list count element
      • list 是列表名字
      • count 是移除数量
        • count > 0左边到右边开始移除匹配到的元素
        • count = 0 移除所有匹配的元素
        • count < 0右边到左边开始移除匹配到的元素
      • element 指定元素值
  • LTRIM
    • 命令含义:截取列表的元素,也就是求列表的子集合。
    • 命令格式:LTRIM key start stop
      • startstop 是由 0 开始计数。0 表示列表第一个元素。
        • LTRIM mylist 0 2 结果只保留列表3元素。
  • RPOPLPUSH - startstop 可以是负数, -1 表示列表里的最后一个元素-2 表示倒数第二个
    • 命令含义:弹出源列表右边的第一个元素,并插入到目标列表的左边的第一个位置。
    • 命令格式:RPOPLPUSH source destination
      • source 源列表。如果 source 不存在,返回 nil,不继续执行任何操作。
      • destination 目标列表。
      • 如果 sourcedestination 指向同一个列表,那么相等于移除列表最后一个元素(右边第一个元素),并插入到列表的头部(左边)
  • BRPOPLPUSH
    • 命令含义:RPOPLPUSH 的阻塞版。
    • 命令格式:BRPOPLPUSH source destination timeout
      • timeout 非零的阻塞时间。timeout = 0 即无限期阻塞客户端连接。
  • LSET
    • 命令含义:设置列表中指定下标位置(index)的值为指定值(value)
    • 命令格式:LSET key index value
      • index 超出范围,会返回 error
  • LINSERT
    • 命令含义:向列表中的指定元素值的前面或后面插入值。
    • 命令格式:LINSERT key BEFORE|AFTER pivot value
      • key 不存在时,不会执行任何操作
      • key 存在,但**不是一个 list **时,返回 error
    • 命令示例:
      • LINSERT mylist BEFORE "world" "There"
        • 表示向 mylist 列表中的 world 元素之前插入 There 元素

集合 Set

命令

  • SADD

    • 命令含义:添加一个或多个指定的member元素到集合的 key中
    • 命令格式:SADD key member [member ...]
      • 如果集合 key 不存在,则新建一个集合,并将元素添加到集合中
      • 如果元素已在集合 key 中存在,则会忽略该元素,继续插入其它元素
      • 如果 key 的类型不是集合,则返回错误
      • Redis 版本 >= 2.4,可以接受多个参数;2.4 以前的版本每次只允许添加一个元素
  • SPOP

    • 命令含义:从 key 集合中移除并返回一个或多个随机元素
    • 命令格式:SPOP key [count]
      • count 表示要从集合 key移除并返回多少个随机元素
      • count 在低版本中不可使用该参数,在 2.6 、2.8、3.0 版本中也不可以使用该参数
      • count 当所传参数数值大于集合的元素数量,会返回整个集合
      • key 不存在时,返回 nil
  • SCARD

    • 命令含义:返回集合的元素数量
    • 命令格式:SCARD key
      • key 不存在时,返回 0
  • SREM

    • 命令含义:从集合中移除指定的元素
    • 命令格式:SREM key member [member ...]
      • 如果 key 不是一个集合,则返回错误
      • 如果 key 集合不存在,则返回 0
      • 可指定多个元素参数,低于 2.4 的版本只能指定一个元素参数
      • 如果 key 集合中不存在指定的元素,则忽略
  • SMOVE

    • 命令含义:将一个元素从源集合移动到目标集合
    • 命令格式:SMOVE source destination member
      • 如果 source 源集合不存在,则不执行任何操作并返回 0
      • 如果 source 源集合不包含指定元素,则不执行任何操作并返回 0
      • source 源集合移除指定元素,并添加到 destination 目标集合中,执行成功后返回 1
      • 如果 destination 目标集合存在指定元素,则命令执行之后只会移除 source 源集合的元素
      • 如果 source destination 不是集合类型,则返回错误
  • SISMEMBERS

    • 命令含义:判断集合中是否存在指定元素
    • 命令格式:SISMEMBER key member
      • 如果存在,则返回 1;不存在则返回 0
  • SMEMBERS

    • 命令含义:返回key集合所有的元素
    • 命令格式:SMEMBERS key
  • SRANDMEMBER

    • 命令含义:随机返回集合中指定数量的元素
    • 命令格式:SRANDMEMBER key [count]
      • 命令执行,不会移除集合中的元素
      • Redis 2.6 开始,可以接受 count 参数
      • 如果 count正数且大于集合的元素总数,则返回集合的全部元素,没有额外的元素,不会存在重复元素
      • 如果 count正数且小于集合的元素总数,则返回 count 个随机元素,不会存在重复元素
      • 如果 count负数且绝对值大于集合的元素总数,则返回的结果会出现一个元素出现多次的情况,返回的元素数量也会等于 count 的绝对值
  • SSCAN

    • 命令含义:增量迭代一个集合元素
    • 命令格式:SSCAN cursor [MATCH pattern] [COUNT count]
  • SDIFF

    • 命令含义:求取一个集合与给定集合的差集的元素
    • 命令格式:SDIFF key [key ...]
      • key 不存在时,默认是空集 image.png
  • SDIFFSTORE

    • 命令含义:求取两个集合的差集,并将结果保存到目标集合
    • 命令格式:SDIFFSTORE destination key [key ...]
      • SDIFFSTORE key key1 key2 命令中的 key 为目标集合,用于保存差集,命令执行成功后会返回差集的元素数量
      • 如果目标集合 destination 已存在,则覆盖重写
  • SUNION

    • 命令含义:求取多个集合的并集
    • 命令格式:SUNION key [key ...]
      • 不存在key ,被认为是空集合

image.png

  • SUNIONSTORE
    • 命令含义:求取多个集合的并集,并将结果保存到目标集合
    • 命令格式:SUNIONSTORE destination key [key ...]
      • destination 表示目标集合
      • 如果目标集合 destination 已存在,则覆盖重写
      • 命令执行成功后,会返回并集的元素个数
  • SINTER
    • 命令含义:求取多个集合的交集
    • 命令格式:SINTER key [key ...]
      • 如果指定的集合中只要存在一个空集合,则结果必然为空
      • key 不存在时,会被认为是空集合

image.png

  • SINTERSTORE
    • 命令含义:求取多个集合的交集,并将结果保存到目标集合
    • 命令格式:SINTERSTORE destination key [key ...]
      • destination 为目标集合
      • 如果目标集合已存在,则会覆盖重写

哈希 Hash

image.png

命令

  • HSET
    • 命令含义:设置指定哈希集合中的键值对
    • 命令格式:HSET key field value
      • 如果指定的哈希集 key 不存在,即会创建一个新的哈希集并与 key 关联
      • 如果字段已经存在,即会覆盖重写它的值
  • HMSET
    • 命令含义:一次过为指定的 key 哈希集添加多个键值对
    • 命令格式:HMSET key field value [field value ...]
      • 如果 key 哈希集不存在,即创建新的哈希集合
  • HSETNX
    • 命令含义:如果给定的 key 哈希集中不存在指定的字段,则添加字段并设置值
    • 命令格式:HSETNX key field value
      • 如果 key 哈希集不存在,则创建新的哈希集
      • 如果 field 字段存在时,字段的值不会被设置
  • HGET
    • 命令含义:获取指定哈希集合中指定字段的值
    • 命令格式:HGET key field
      • 字段不存在或 key 不存在,则返回 nil
  • HMGET
    • 命令含义:获取指定哈希集合中多个字段的值
    • 命令格式:HMGET key field [field ...]
      • 哈希集中不存在的每个字段,返回 nil
      image.png
      • 返回顺序与字段请求顺序一致
  • HEXISTS
    • 命令含义:判断哈希集中是否存在指定的字段
    • 命令格式:HEXISTS key field
      • 存在,返回 1
      • 不存在,返回 0
  • HGETALL
    • 命令含义:获取指定哈希集合中的所有字段及其对应的值
    • 命令格式:HGETALL key
      • key 不存在时,返回空列表
      • 返回列表中,每个字段名的下一个是它的值
  • HKEYS
    • 命令含义:返回哈希集中所有字段的名字
    • 命令格式:HKEYS key
      • key 不存在时,返回空列表
  • HVALS
    • 命令含义:返回哈希集中所有字段的
    • 命令格式:HVALS key
      • key 不存在时,返回空列表
  • HLEN
    • 命令含义:返回哈希集中所包含字段的总数
    • 命令格式:HLEN key
      • key 不存在时,返回 0
  • HSTRLEN
    • 命令含义:返回哈希集中指定字段的值的字符串长度
    • 命令格式:HSTRLEN key field
      • 如果 key 不存在或者 field 不存在,则返回 0
  • HDEL
    • 命令含义:删除哈希集中的指定字段
    • 命令格式:HDEL key field [field ...]
      • 2.4 以上的版本,接受多个 field 参数,低版本只能接受一个
      • key 不存在,则返回 0
      • 返回的结果,表示删除了多少个字段
  • HSCAN
    • 命令含义:增量迭代一个集合元素
    • 命令格式:HSCAN cursor [MATCH pattern] [COUNT count]
  • HINCRBY
    • 命令含义:为给定的哈希集合中的指定字段的值增加数值。
    • 命令格式:HINCRBY key field increment
      • increment 表示增加的步长
      • 如果字段不存在,则先设置为 0 ,再执行增加操作
  • HINCRBYFLOAT
    • 命令含义:为指定 key 的哈希集合的 field 字段值执行 float 类型的increment 增值
    • 命令格式:HINCRBYFLOAT key field increment
      • 字段的值,必须是数字型
      • increment 要是能被解析成 float 类型的值

有序集合 Zset

增加和查询的命令

  • ZADD
    • 命令含义:向有序集合中添加元素。
    • 命令格式:ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
      • 参数 XX,NX,CH,INCR 只能在 >= redis 3.0.2 的版本使用
      • 如果 key 类型不是有序集合,则返回错误
      • 可以一次过添加多个【分数 score + 元素 member
      • 如果已存在对应成员元素,即修改成员元素的 score 值,并更新到正确的排序位置
      • 分数值 score 是一个双精度的浮点型数字字符串。-inf 表示负无穷,+inf 表示正无穷。数值范围(253)=9007199254740992(-2^{53}) = -9007199254740992 (253)=9007199254740992(2^{53}) = 9007199254740992
      • XX 选项,表示更新存在的元素,若不存在则不进行任何操作
      • NX 选项,表示不更新存在的元素,只是添加新元素
      • CH 选项,表示返回发生变化的元素总数,包括新添加的元素和已存在但更新了分数(分数相同不会被更新)的元素
      • INCR 选项,表示对指定的元素进行递增操作
      • 元素分数相同时,按元素的字典规则进行排序。字典顺序排序使用二进制,比较的是字符串的字节数组
  • ZRANGE
    • 命令含义:返回有序集合中的指定范围的元素。
    • 命令格式:ZRANGE key start stop [WITHSCORES]
      • 返回的元素按分数从低到高排序,分数相同则按字典排序
      • startstop 是基于零的索引,0 表示第一个元素,1 表示第二个元素, -1 表示倒数第一个元素,-2 表示倒数第二元素
      • startstop全包含区间。如 ZRANGE myzset 0 1 会返回集合的第一个和第二个元素
      • start 大于 stop ,返回空列表。stop 大于集合长度,默认返回集合的最后一个元素
      • WITHSCORES 选项,表示将元素和分数一起返回。格式如:element_1, score_1, element_2, score_2, …, element_N, score_N
  • ZRANGEBYLEX
    • 命令含义:返回集合中的指定区间的成员,成员要按字典正序排序,但要求元素的分数必须相同
      • 命令格式:ZRANGEBYLEX key min max [LIMIT offset count]
        • 分数 score 不一致时,不要使用该命令,因为返回结果不准确
        • min 表示排序位置中最小的元素,可以用 [ 开头,也可以用 ( 开头,可以使用 -代替
        • max 表示排序位置中最大的元素,可以用 [ 开头,也可以用 ( 开头,可以使用 +代替
        • LIMIT 表示返回结果是否进行分页,且必须指定 offsetcount
          • offset 表示返回结果的起始位置
          • count 表示结果的数量
  • ZRANGEBYSCORE
    • 命令含义:返回有序集合中分数处于 minmax 之间的所有元素(包括分数与 minmax 相等的)
    • 命令格式:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
      • WITHSCORES 选项,会返回元素和其分数
      • 默认情况下,min 和 max 都是闭区间,若要指明为开区间,在 minmax 前面加上 (
      image.png
  • ZRANK
    • 命令含义:返回集合中指定元素的排名,排名时从小到大递增
    • 命令格式:ZRANK key member
      • 排名以 0 开始,score 最小的元素排名为 0
      • member 不是集合的元素时,返回 nil
  • ZSCAN
    • 命令含义:增量迭代一个集合元素
    • 命令格式:ZSCAN key cursor [MATCH pattern] [COUNT count]
  • ZSCORE
    • 命令含义:返回集合中的指定元素的 score 分数值
    • 命令格式:ZSCORE key member
      • 返回值是以字符串形式表示double 型浮点数

统计的命令

  • ZCARD
    • 命令含义:返回集合中的元素个数
    • 命令格式:ZCARD key
  • ZCOUNT
    • 命令含义:返回集合中的指定分数范围的元素个数
    • 命令格式:ZCOUNT key min max
  • ZLEXCOUNT
    • 命令含义:统计集合中的指定成员之间的成员个数
    • 命令格式:ZLEXCOUNT key min max
      • zlexcount zset [member1 [member5
      • minmax 既可以是分数值,也可以是元素值
      image.png

删除元素的命令

  • ZPOPMIN
    • 命令含义:删除并返回集合中的得分最低count 个元素
      • 命令格式:ZPOPMIN key [count]
        • count 的默认值为 1。当 count 大于 1 时,首先得分最低的元素,其次是得分倒数第二的元素,并以此递推。
        • 返回值是分数和元素的列表
  • ZPOPMAX
    • 命令含义:
    • 命令格式:
  • BZPOPMIN
    • 命令含义:
    • 命令格式:
  • BZPOPMAX
    • 命令含义:
    • 命令格式:
  • ZREM
    • 命令含义:
    • 命令格式:
  • ZREMRANGEBYRANK
    • 命令含义:
    • 命令格式:
  • ZREMRANGEBYSCORE
    • 命令含义:
    • 命令格式:

元素排序的命令

  • ZREVRANK
    • 命令含义:
    • 命令格式:
  • ZREVRANGE
    • 命令含义:
    • 命令格式:
  • ZREVRANGEBYLEN
    • 命令含义:
    • 命令格式:
  • ZREVRANGEBYSCORE
    • 命令含义:
    • 命令格式:

集合运算的命令

  • ZINCRBY
    • 命令含义:
    • 命令格式:
  • ZINTERSTORE
    • 命令含义:
    • 命令格式:
  • ZUNIONSTORE
    • 命令含义:
    • 命令格式:

地理位置 Geospatial

基数统计 Hyperloglog

位图 Bitmap