通用命令
keys *
:遍历打印所有的 key,O(n),后面可以是正则表达式,一般不在生产环境使用,可以用来热备从节点dbsize
:计算 key 的总数,O(1)exists key
:检查 key 是否存在,O(1),存在返回1,不存在返回0del key
:删除指定 key-value,O(1),可一次删除多个,删除成功返回1,删除失败返回0expire 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,value3lpush key value1 value2 value3 ...
:从列表左端插入值,O(1~n),插入后顺序是:value3,value2,value1,…linsert key before|after value newValue
:在list指定的值前|后插入 newValue,O(n)lpop|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
:交集zunionstore
:并集
来源:《Redis 开发与运维》第 2 章 API 的理解和使用