(二) Redis的常用API的理解和使用

一 通用命令

  • keys *: 遍历打印所有的 key,O(n),后面可以是正则表达式,一般不在生产环境使用,可以用来热备从节点
  • dbsize: 计算 key 的总数,O(1)
  • exists key: 检查 key 是否存在,O(1),存在返回1,不存在返回0
  • del key: 删除指定 key-value,O(1),可一次删除多个,删除成功返回1,删除失败返回0
  • expire key seconds: key 在 seconds 秒后过期,O(1)
  • ttl key: 查看 key 剩余的过期时间,O(1)
  • persist key: 去掉 key 的过期时间,O(1)
  • type key: 返回 key 的类型,O(1)

二 字符串类型(string)

结构:key 是字符串,value 可以是字符串、数字字符串、json 串,本质上 value 都是二进制,最大不能超过 512MB
使用场景: 缓存 计数器 分布式锁
API

  • get key:获取 key 对应的 value,O(1)
  • set key:设置 key-value,O(1)
  • del key:删除 key-value,O(1)
  • incr key:key 自增 1,如果 key 不存在,自增后 get(key)=1,O(1)
  • decr key:key 自减 1,如果 key 不存在,自减后 get(key)=-1,O(1)
  • incrby key k:key 自增 k,如果 key 不存在,自增后 get(key)=k,O(1)
  • decrby key k:key 自减 k,如果 key 不存在,自减后 get(key)=-k,O(1)
  • set key value:不管 key 是否存在,都设置,O(1)
  • setnx key value:key 不存在,才设置,O(1)
  • set key value xx:key 存在,才设置,O(1)
  • mget key1 key2 key3...:批量获取 key,原子操作,O(n)
  • mset key1 value1 key2 value2 key3 value3...:批量设置 key-value,O(n)
  • getset key newvalue:设置新的 newvalue 并返回旧的 value,O(1)
  • append key value:将 value 追加到旧的 value,O(1)
  • strlen key:返回字符串的长度,O(1)
  • incrbyfloat key 3.5:增加 key 对应的值 3.5,O(1)
  • getrange key start end:获取字符串指定下标所有的值,O(1)
  • setrange key index value:设置指定下标所有对应的值,O(1)

三 哈希类型(hash)

结构: key-value,value 类型是一堆的 key-value(field-value),类似“Mapmap”类型。
使用场景: 比如记录每个用户个人主页的访问量
API:都是以“h”开头

  • hget key field: 获取 hash key 对应的 field 的value,O(1)
  • hset key field value: 设置 hash key 对应的 field 的 value,O(1)
  • hdel key field: 删除 hash key 对应的 field 的 value,O(1)
  • hexists key field: 判断 hash key 是否有 field,O(1)
  • hlen key: 获取 hash key field 数量,O(1)
  • hgetall key: 返回 hash key 对应所有的 field 和 value,O(n)
  • hvals key: 返回 hash key 对应的所有 field 的 value,O(n)
  • hkeys key: 返回 hash key 对应所有的field,O(n)
  • hsetnx key field value: 设置 hash key 对应的 field 的 value ,如果field已存在,则设置失败,O(1)
  • hincrby key field intCounter: 设置 hash key 对应的 field 的 value 自增intCounter,O(1)
  • hincrbyfloat key field floatCounter: 设置 hash key 对应的 field 的 value 自增intCounter(浮点数版),O(1)

四 列表类型(list)

结构:key-elements,elements是一个队列,有序,可重复,左右两边插入弹出
使用场景:消息队列 文章列表
API:都是以“l”、“r”开头

  • rpush key value1 value2 value3 ...:从列表右端插入值,O(1~n),插入后顺序是:…,value1,value2,value3
  • lpush key value1 value2 value3 ...:从列表左端插入值,O(1~n),插入后顺序是:value3,value2,value1,…
  • linsert key before|after value newValue:在list指定的值前|后插入 newValue,O(n)
  • pop|rpop key:从列表左侧|右侧弹出一个 item,O(1)
  • lrem key count value:根据 count 值,从列表删除所有 value 相等的项,O(n)
    • count > 0,从左到右删除最多 count 个 value 相等的项
    • count < 0,从右到左删除最多 -count 个 value 相等的项
    • count = 0,删除所有 value 相等的项
  • ltrim key start end:按照索引范围修剪列表,保留 start~end 长度的列表,O(n)
  • lrange key start end:获取列表指定所有 item,包含 end,O(n)
  • lindex key index:获取列表指定索引的 item,O(n)
  • llen key:获取列表长度,O(1)
  • lset key index newValue:设置列表指定索引值为 newValue,O(n)
  • blpop key timeout:lpop 阻塞版本,timeout 是阻塞超时时间,timeout=0 为永远不阻塞,O(1)
  • brpop key timeout:rpop 阻塞版本,timeout 是阻塞超时时间,timeout=0 为永远不阻塞,O(1)

开发技巧:
LRUSH + LPOP = Stack(栈)
LPUSH + RPOP = Queue(队列)
LPUSH + LTRIM = Capped Collection(有限集合)
LPUSH + BRPOP = Message Queue(消息队列)

五 集合类型(set)

结构: key-elements,elements 是一个集合,无序,不重复,支持集合间操作
使用场景:例如抽奖系统,微博的点赞点踩等等
API:都是以“s”开头

  • sadd key element:向集合中添加 element,如果 element 已经存在,添加失败,O(1)
  • srem key element:将集合 key 中的 element 移除,O(1)
  • scard key:计算集合大小,O(1)
  • sismember key element:判断集合中是否存在 element 元素,O(1)
  • srandmember key count:从集合中随机挑选 count 个元素,元素不会被删除,O(1)
  • spop key:从集合中随机弹出一个元素,元素会被删除,O(1)
  • smembers key:获取集合中所有元素,O(1),谨慎使用,数据量大的话容易阻塞

集合间的API

  • sdiff key1 key2:差集
  • sinter key1 key2:交集
  • sunion key1 key2:并集
  • sdiff|sinter|sunion store key3:将差集|交集|并集的结果保存到 key3 集合

集合间的使用场景:比如共同关注,共同好友等等

六 有序集合类型(zset)

结构:key-values,values 是一堆 key-value(core-element),core 用于排序,无重复元素,有序
使用场景:排行榜
API:都是以“z”开头

  • zadd key core1 element1 core2 element2:添加元素,core 可以重复,element 不可以重复 O(logN)
  • zrem key element:删除元素,O(1)
  • zscore key element:返回元素的 core,O(1)
  • zincrby key increScore clement:增加或减少元素的分数,O(1)
  • zcard key:返回元素的总个数,O(1)
  • zrange key start end [WITHSCORES]:返回指定索引范围内的升序元素[分值],O(log(n) + m),n 是元素个数,m 是需要获取的元素个数
  • zrangebyscore key minScore maxScore [WITHSCORES]:返回指定范围 score 的升序元素[分值],O(log(n) + m),n 是元素个数,m是需要获取的元素个数
  • zcount key minScore maxScore:返回指定范围 score 的升序元素个数,O(log(n) + m),n 是元素个数,m 是需要获取的元素个数
  • zremrangebyrank|zremrangebyscore key start end:删除指定排名|范围 score 内的升序元素,O(log(n) + m),n 是元素个数,m 是需要获取的元素个数
  • zrevrank:从高到低倒序
  • zrevrange:从高到低取范围数据
  • zrevrangebyscore:给定分数获取从高到低的结果
  • zinterstore:交集

猜你喜欢

转载自blog.csdn.net/Instanceztt/article/details/128233226