Redis数据结构和相应操作

Redis通用操作

  1. Keys [pattern] # 遍历出指定模式的key,可使用 , ?等通配符 - 一般不在生产环境中使用,O(n)
      _Keys
    _ # 遍历出所有key
    Keys he[h-l]* # 遍历以 he 开头,第三个字符在 h-l 期间的匹配key
  2. dbsize # 计算 key 的总数,O(1)
  3. exists key # 检查 key 是否存在,O(1)级别时间复杂度
  4. del key # 删除指定 key ,O(1)
  5. expire key seconds # key在 seconds 秒后过期 ,O(1)
  6. ttl key # 查看 key 剩余过期时间 -1 表达无过期时间 -2表示已过期,O(1)
  7. persist key # 去掉 key 的过期时间 ,O(1)
  8. type key # 返回 key 的类型 ,O(1)

String类型

String键值结构

操作

  1. get key # 获取 key 对应value ,O(1)
  2. set key value # 设置 key-value ,已有相同 key 值,则进行覆盖,O(1)
  3. setnx key value # 设置 key-value ,key 不存在,才进行设置,O(1)
  4. set key value xx # 设置 key-value ,key 存在,才进行设置,O(1)
  5. del key # 删除 key-value ,O(1)
  6. incr key # key 自增1, 如果key不存在,自增都get(key)=1 ,O(1)
  7. decr key # key 自减1, 如果key不存在,自减都get(key)=-1 ,O(1)
  8. incrby key k # key 自增k, 如果key不存在,自增都get(key)=k ,O(1)
  9. decrby key k # key 自减k, 如果key不存在,自减都get(key)=-k,O(1)
  10. mget key1 key2 key3… # 批量获取key,原子操作,O(n)
  11. mset key1 value1 key2 value2 key3 value3… # 批量设置key-value,原子操作,O(n)
  12. getset key newvalue # set key newvalue并返回 oldvalue,O(1)
  13. append key value # 将 value 将追加到 oldvalue,O(1)
  14. strlen key # 返回字符串长度(注意中文) ,O(1)
  15. incrbyfloat key floatValue # 增加key 对应的值 ,O(1)
  16. getrange key start end # 获取字符串指定下标的所有值 ,O(1)
  17. setrange key index value # 设置指定下标对应的值 ,O(1)

Hash类型

Hash键值结构

注: field不能相同,value可以相同

操作

  1. hget key field # 获取 hash key 对应field 的 value ,O(1)
  2. hset key field value # 设置 hash key 对应field 的 value ,O(1)
  3. hdel key field # 删除 hash key 对应field 的 value ,O(1)
  4. hexists key field # 判断 hash key 是否有对应 field ,O(1)
  5. hlen key # 获取 hash key 的 field 数量,O(1)
  6. hmget key field1 field2… # 批量获取hash-key的一批 field 对应值,O(n)
  7. hmset key field1 value1 field2 value2… # 批量设置 hash-key的一批 field 对应值,O(n)
  8. hgetall key # 返回 hash-key 对应所有的 field-value 值,O(n)
  9. hvals key # 返回 hash-key 对应所有 field 的 value 值,O(n)
  10. hkeys key # 返回 hash-key 对应所有 field ,O(n)
  11. hincrby key field k # key field 自增 k ,如果key不存在,自增都hget(key, field)=k ,O(1)
  12. hincrbyfloat key field k # key field 自增 k ,如果key不存在,自增都hget(key, field)=k ,O(1)
  13. hsetnx key field value # 设置 hash key对应 field的 value ,field 不存在,才进行设置,O(1)

List类型

List键值结构

注: 有序(由插入顺序决定遍历顺序),可以重复,左右两边插入弹出

操作

  1. rpush key value1 value2… # 从列表的右端插入值 ,O(1~n)
  2. lpush key value1 value2… # 从列表的左端插入值 ,O(1~n)
  3. linsert key before/after value newvalue # 在list指定的值前|后插入新值,O(n)
  4. lpop key # 从列表的左端弹出一个值(删除) ,O(1)
  5. rpop key # 从列表的右端弹出一个值(删除) ,O(1)
  6. lrem key count value # 根据 count 值,从列表中删除所有 value 相等的项 ,O(n)
    • count > 0 , 从左到右,删除最多 count 个 value 相等的项目
    • count < 0 , 从右到左,删除最多 Math.abs(count) 个 value 相等的项目
    • count = 0 , 删除所有 value 相等的项目
  7. ltrim key start end # 按照索引范围(索引从 0 开始 ,-1 表示最后一个元素)修剪列表 ,O(n)
  8. lrange key start end # 获取列表指定索引范围(索引从 0 开始,-1 表示最后一个元素,包括 end )的值 ,O(n)
    • lrange list 0 5 = lrange list -6 -1 = lrange list 0 -1
  9. lindex key index # 获取列表指定索引的值 ,O(n)
  10. llen key # 获取列表长度 ,O(1)
  11. lset key index newValue # 设置列表指定索引的值 ,O(n)
  12. blpop key timeout # lpop 阻塞版本,timeout 是阻塞超时时间,为0 表示永不超时 ,O(1)
  13. rlpop key timeout # rpop 阻塞版本,timeout 是阻塞超时时间,为0 表示永不超时 ,O(1)

Set类型

Set键值结构

注: 无序(顺序不由插入顺序决定),不可重复,支持集合间的操作

操作

  1. sadd key value1 value2…. # 向集合 key 中添加元素,若已有重复元素,则添加失败 ,O(n)
  2. srem key value1 value2…. # 移除集合 key 中元素,O(n)
  3. scard key # 计算集合元素个数,O(1)
  4. sismember key value # 判断集合 key 中 value 元素是否存在,O(n)
  5. srandmember key count # 随机从集合 key 中挑选 count 个元素,O(n)
  6. spop key # 随机从集合 key 中挑选 1 个元素,O(1)
  7. smembers key # 获取集合 key 中所有元素,O(n)
  8. sdiff key1 key2 # 两个集合的差集,O(n)
  9. sinter key1 key2 # 两个集合的交集,O(n)
  10. sunion key1 key2 # 两个集合的并集,O(n)
  11. sunionstore/sdiffstore/sinterstore destkey key1 key2 # 并集/差集/交集结果存到 destkey 中,O(n)

Sorted Set类型

Sorted Set键值结构

注: 有序,不可重复,支持集合间的操作

操作

  1. zadd key score value score2 value2…. # 向有序集合 key 中添加score value对,value不可重复元素,否则添加失败 ,O(logN)
  2. zrem key value value2…. # 删除有序集合 key 中添加元素 ,O(1)
  3. zscore key value # 获取有序集合 key 中 value 对应的 score ,O(1)
  4. zincrby key increScore value # 增加有序集合 key 中 value 对应的 score 值,O(1)
  5. zcard key # 获取有序集合 key 中 value 个数,O(1)
  6. zrank key value # 获取有序集合 key 中 value 的排名(从低到高),O(1)
  7. zrevrank key value # 获取有序集合 key 中 value 的排名(从高到低),O(1)
  8. zrange key start end [withscores] # 获取有序集合指定索引范围(索引从 0 开始,-1 表示最后一个元素)的值并打印 score - 升序,O(logn + m)
  9. zrevrange key start end [withscores] # 获取有序集合指定索引范围(索引从 0 开始,-1 表示最后一个元素)的值并打印 score - 降序,O(logn + m)
  10. zrangebyscore key minScore maxScore [withscores] # 获取有序集合指定分数范围的值并打印 score - 升序,O(logn + m)
  11. zrevrangebyscore key minScore maxScore [withscores] # 获取有序集合指定分数范围的值并打印 score - 降序,O(logn + m)
  12. zcount key minScore maxScore # 获取有序集合指定分数范围的值的个数 ,O(logn + m)
  13. zremrangebyrank key start end # 删除指定排名内的升序元素,O(logn + m)
  14. zremrangebyscore key minScore maxScore # 删除指定分数范围的升序元素,O(logn + m)

参考资料

[1] http://redisdoc.com/
[2] https://coding.imooc.com/class/151.html

Author: HB
Link: http://www.huangbin.fun/Redis数据结构和相应操作.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.