Redis - (5种数据结构)命令总结

(5种数据结构)命令总结

 

一丶Keys

 

 

 

  1) 查询key

  • EXISTS key 判断key是否存在
  • TYPE key 查询key对应的类型
  • KEYS pattern 查询匹配表达式的key, 时间复杂度O(1), 在key多时,不建议使用
  • SCAN cursor [MATCH pattern] [COUNT count]
    • 使用游标查询key
    • MATCH key表达式
    • COUNT 命中多少个key后返回, 有时可能比指定个数多一点, 默认是10

  

 

   2) 删除key

  • DEL key [key ...]  删除key, 包括key对应的值
  • UNLINK key [key ...] 异步删除key, 非阻塞

 

  3) 修改key名字

  • RENAME key newkey  如果newkey已经存在, 存在的将会被覆盖, 如果key不存在, 将会报错
  • RENAMENX key newkey 只有当newkey不存在时,才会修改key

 

  4)有效期

  redis常用作缓存, 所以在使用redis存储数据时, 一般会设置有效期

  • EXPIRE key seconds  设置key有效期为指定秒数, 在指定秒数后, 该key将会被自动删除
  • EXPIREAT key timestamp 设置key在指定时间戳(单位秒)时失效
  • PEXPIRE key milliseconds 设置key有效期为指定毫秒数
  • PEXPIREAT key milliseconds  设置key在指定时间戳(单位毫秒)时失效

 

  • PERSIST key 移除key的有效期设置, 即key永久有效

 

  • TTL key 查询key的有效期(仍可存活的时间) 单位秒   -1表示未设置有效期, -2表示key不存在
  • PTTL key 查询key的有效期(仍可存活的时间) 单位毫秒  -1表示未设置有效期, -2表示key不存在

 

  5) 迁移key

 

 

二丶Strings

 

 

  本数据类型为字符串, 可以用于存储数字, 有数字运算操作, 如增加, 位运算.

 

  1) 增加

  • SET key value [EX seconds|PX milliseconds] [NX|XX]
    • 设置添加一个字符串
    • EX 设置过期时间,单位秒
    • PX 设置过期时间,单位毫秒
    • NX 只有当key不存在时才设置
    • XX 只有当key存在时才设置
  • SETNX key value 添加设置value, 只有当key不存在时才添加
  • MSET key value [key value ...]   批量添加
  • MSETNX key value [key value ...] 批量添加, 只有当key不存在时才添加
  • SETEX key seconds value 添加,同时设置有效期(单位秒)
  • PSETEX key milliseconds value 添加,同时设置有效期(单位毫秒)
  • APPEND key value 追加字符串,如果key不存在,则设置(set key value)

 

  2)查询

  • GET key  查询value
  • MGET key [key ...]  批量查询value
  • GETRANGE key start end 查询value的子字符串
  • STRLEN key 查询value长度

 

  3)修改 (可以使用1中操作修改key对应的value)

  • SETRANGE key offset value 替换value中的子字符串   offset 偏移, 起始是0

 

  4) 数字运算

  • INCR key   值加1
  • INCRBY key increment  值加上指定整数
  • INCRBYFLOAT key increment 值加上指定浮点数
  • DECR key   值减1
  • DECRBY key decrement  值减去指定整数

 

  5) 位操作

 

 

 

三丶Lists

 

 

 

   本数据类型是列表,左边是头部, 右边是尾部, 可以理解为双端队列,类似java中的Deque,如LinkedList.

 

  1) 增加

  • LPUSH key element [element ...]  从队列左边(头部)(批量)添加值
  • LPUSHX key element 从队列左边(头部)添加值, 只有当值存在时才添加(并不会覆盖)
  • RPUSH key element [element ...] 从队列右边(尾部)(批量)添加值
  • RPUSHX key element 从队列右边(尾部)添加值, 只有当值存在时才添加(并不会覆盖)
  • LINSERT key BEFORE|AFTER pivot  element        在指定值"pivot" 前|后 插入值"element"

  2) 查询

  • LINDEX key index  通过下标获取队列中对应的元素 (下标起始是0, 从左边到右边递增) 
    • 从时间复杂度为O(N)可以推断底层实现应该是链表
  • LRANGE key start stop 批量查询,  起始下标是0, -1表示列表最后一个元素, -2表示倒数第二个
  • LLEN key 查询队列的长度

 

  3) 修改

  • LSET key index element 修改(替换)指定下标的元素

 

  4) 删除

  • LREM key count element 删除count个值为element的元素
  • LTRIM key start stop  保留[start, stop]下标范围元素的队列, 裁剪去其他  (批量删)
  • LPOP key  删除第一个元素(左边头部), 并返回该元素
  • RPOP key 删除最后一个元素(右边尾部), 并返回该元素
  • BLPOP key timeout 删除第一个元素(左边头部), 并返回该元素, 如果队列为空, 则阻塞等待timeout秒
  • BRPOP key timeout 删除最后一个元素(右边尾部), 并返回该元素, 如果队列为空, 则阻塞等待timeout秒

 

  5) 其他

  • RPOPLPUSH source destination   将source队列的最后一个元素移除, 并添加到destination队列的头部
  • BRPOPLPUSH source destination timeout   将source队列的最后一个元素移除, 并添加到destination队列的头部, 如果source队列为空, 则阻塞等待timeout秒

 

 

四丶Sets

 

 

 

本数据类型是(不重复)集合, 与列表不一样的地方在于, 它没有顺序, 且值不重复, 可以类比java中的Set.

 

 1) 增加

  • SADD key member [member ...] (单个或批量增)

 

2) 查询

  • SMEMBERS key 获取set中的所有成员
  • SRANDMEMBER key [count] 随机获取set中的一个或者多个成员
  • SSCAN key cursor [MATCH pattern] [COUNT count] 使用游标迭代遍历集合中的元素
  • SCARD key  查询集合中的成员个数
  • SISMEMBER key member 判断member是不是在集合中

 

3) 删除

  • SREM key member [member ...] 删除指定成员
  • SPOP key [count]  随机删除并返回一个或多个成员

 

4) 集合与集合之间的运算

  • 交集
    • SINTER key [key ...]
    • SINTERSTORE destination key [key ...] 求出交集, 并保存到目的集合中
  • 并集
    • SUNION key [key ...]
    • SUNIONSTORE destination key [key ...] 求出并集, 并保存到目的集合中
  • 差集
    • SDIFF key [key ...]
    • SDIFFSTORE destination key [key ...] 求出差集, 并保存到目的集合中
  • 其他
    • SMOVE source destination member 从一个集合移除指定成员,并放到指定集合中

 

 

 

五丶Sorted Sets

 

 

   本数据类型为有序集合,根据数据对(score, member)中的score排序存储, member不重复, 可以类比java中的SortedSet, (用的比较少)

 

  1) 增加或修改

  •  ZADD key [XX|NX] [CH] [INCR] score member [score member ...]
    • XX 只更新已存在成员的分数, 不添加成员
    • NX 只添加新成员, 不更新已存在成员
    • CH 添加新成员, 如果成员已经存在,则更新分数, 并返回改变的成员数量(包括添加的和修改分数的)
    • INCR 和命令ZINCRBY类似, 用于"增加"修改分数

  2) 查询

2.1) 查询成员

  • ZRANGE start stop [WITHSCORES]
    • 排序集合, 根据分数从低到高排序,  zrange命令指定下标范围返回对应的值
    • WITHSCORES 返回时,带上分数
  • ZREVRANGE start stop [WITHSCORES]
    • 排序集合, 根据分数从高到低排序, zrevrange命令指定下表范围返回对应的值
    • WITHSCORES 返回时,带上分数

 

  • ZRANGEBYLEX key min max [LIMIT offset count]
    • 分数相同是前提, 分数相同的成员字典排序(如abcd) 
    • 对分数相同的成员进行范围查询
    • 默认情况下, “max” 和 “min” 参数前必须加 “[” 符号作为开头。”[” 符号与成员之间不能有空格, 返回成员结果集会包含参数 “min” 和 “max” 。
    • “max” 和 “min” 参数前可以加 “(“ 符号作为开头表示小于, “(“ 符号与成员之间不能有空格。返回成员结果集不会包含 “max” 和 “min” 成员。
    • 可以使用 “-“ 和 “+” 表示得分最小值和最大值
    • LIMIT 分页查询
  •  ZREVRANGEBYLEX key min max [LIMIT offset count]
    • 与上面命令类似, 只是排序相反

 

  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    • 根据分数范围查询成员, (默认是分数从低到高排序)
    • min, max  如 1 5,  查询结果将会包含最大最小值, 如果想排除, 数字前面可以加(
    • -inf +inf 可以表示最小最大值
    • WITHSCORES 返回时,带上分数
    • LIMIT 分页查询
  • ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
    • 与上面命令类似, 只是排序相反

 

 

 
 

2.2) 查询排名和分数

  • ZRANK key member   查询指定成员对应的排名(下标, 起始是0, 分数从低到高)
  • ZREVRANK key member  与上面命令类似, 只是排序相反
  • ZSCORE key member  查询指定成员的分数

 

 

2.3) 统计

  • ZCARD key  统计集合中成员的个数
  • ZCOUNT key min max   统计分数范围内的成员个数,     min, max 可以参考ZRANGEBYSCORE
  • ZLEXCOUNT key min max  当所有分数都相同时使用, 这种情况下, 会根据member字典排序,  统计member在min,max范围的个数,    min,max可以参考ZRANGEBYLEX

 

 

  3) 删除

  • ZPOPMIN key [count] 删除一个或多个最小分数的值, 并返回对应的成员和分数
  • ZPOPMAX key [count] 删除一个或多个最大分数的值, 并返回对应的成员和分数
  • BZPOPMIN key [key ...] timeout 删除一个或多个最小分数的值, 并返回对应的成员和分数, 如果没有,则阻塞等待指定秒数
  • BZPOPMAX key [key ...] timeout 删除一个或多个最大分数的值, 并返回对应的成员和分数, 如果没有,则阻塞等待指定秒数
     
  • ZREM key member [member ...] 删除指定成员
  • ZREMRANGEBYLEX key min max  当所有分数都相同时使用, 这种情况下, 会根据member字典排序,  删除在min,max范围的member,    min,max可以参考ZRANGEBYLEX
  • ZREMRANGEBYRANK key min max   删除排名(下标)范围内的成员,     min, max  起始下标是0, -1表示列表最后一个元素, -2表示倒数第二个
  • ZREMRANGEBYSCORE key min max     删除分数范围内的成员,     min, max 可以参考ZRANGEBYSCORE

 

4) 集合之间的运算

  • ZINTERSTORE destination key [key ...]    求交集并存储到destination
  • ZUNIONSTORE destination key [key ...]    求并集并存储到destination

 

5) 分数运算

  • ZINCRBY key increment member  给指定成员增加指定分数

 

 

 

 

六丶Hashes

 

 

 

  本数据类型为哈希, 可以类比java中的HashMap

 

  1) 增加或修改

  • HSET key field value  在key添加哈希键值对,  field value,  类似java中, HashMap.put(field, value)
  • HMSET key field value [field value ...] 批量加
  • HSETNX key field value 只有当field不存在时才添加

 

  2) 查询

  • HGET key field  
  • HMGET key field [field ...] 批量查
  • HGETALL key 查询所有
  • HSCAN key cursor [MATCH pattern] [COUNT count] 使用游标查询

 

  • HKEYS key 查询所有field
  • HVALS key 查询所有values
  • HEXISTS key field 判断field是否存在

 

  • HLEN key 查询键值对的个数
  • HSTRLEN key field  查询field对应value的字符长度

 

  3) 删除

  • HDEL key field [field ...] 删除一个或多个field

 

  4) 运算

  • HINCRBY key field increment 值为整数时, 增加指定值
  • HINCRBYFLOAT key field increment 值为浮点数时, 增加指定值

 

 

 

 七丶后记

  虽说后台总被嘲讽CRUD, 但"增删查改"确实是学习数据相关的技术的菩提总纲, 精辟

 

 

 

 学习资料:

  官方文档

 

 

 

 

 

posted @ 2019-12-25 18:53  timfruit  阅读(550)  评论(0编辑  收藏  举报