通用命令

  • keys:遍历所有的key【keys一般不再生产环境使用】,时间复杂度O(n)

    • keys *
    • keys he*
    • keys he[h-l]*
    • keys ph?
  • dbsize:计算key的总数,时间复杂度O(1)
  • exists key:检查key是否存在,如果存在,返回1;不存在,返回0,时间复杂度O(1)
  • del key[key...]:删除key,时间复杂度O(1)
  • expire key seconds:设置key的过期时间,key在seconds秒会自动删除,时间复杂度O(1)
    • ttl key:查看key的剩余过期时间

      • 如返回-2,则表示key不存在,已经过期
      • 如返回-1,则表示key存在,没有过期时间
    • persist key:去掉key的过期时间
  • type key:key的数据类型,时间复杂度O(1)

数据结构与API

String

字符串键值结构

key value(最大512M)
hello world
counter 1
bits 1 0 1 0 1 0 1

使用场景

  • 缓存
  • 计数器
  • 分布式锁
  • ......

API

API 作用 时间复杂度
get key 获取key对应的value O(1)
set key value 设置key-value,不管key是否存在,都进行设置 O(1)
setnx key value 设置key-value,key不存在,才设置 O(1)
set key value xx 设置key-value,key存在,才设置 O(1)
mget key1 key2 key3 批量获取key,原子操作 O(n)
mset key1 value1 key2 value2 批量设置key-value O(n)
del key 删除key-value O(1)
incr kry key自增1,如果key不存在,自增后get(key)=1 O(1)
decr kry key自减1,如果key不存在,自减后get(key)=-1 O(1)
incrby kry k key自增k,如果key不存在,自增后get(key)=k O(1)
decrby kry k key自减k,如果key不存在,自减后get(key)=-k O(1)
getset key newvalue 设置key-newvalue并返回旧的value O(1)
append key value 将value追加到旧的value O(1)
strlen key 返回字符串的长度(注意中文) O(1)
incrbyfloat key value 增加key对应的值value,浮点数操作 O(1)
getrange key start end 获取字符串指定下标所有的值 O(1)
setrange key index value 设置指定下标的值为value O(1)

n次get与1次mget

  • n次get = n次网络时间 + n次命令时间
  • 1次mget = 1次网络时间 + n次命令时间

Hash Tables

哈希键值结构

key field value
user:1:info id 1
name "你是一个好人"
age 22
date 2019-12-06

API

API 作用 时间复杂度
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)
hmget key field1 field2 批量获取hash key的一批field的值 O(n)
hmset key field1 value1 field2 values 批量设置hash key的一批filed value O(n)
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自增floatCounter O(1)

String VS Hash

相似的API

String API Hash API
get hget
set、setnx hset、hsetnx
del hdel
incr、incrby、decr、decrby hincrby
mset hmset
mget hmget

Linked Lists

列表结构

key elements
user:1:meaasge a-b-c-d-e-f-g-h-i-j-k

特点

  • 有序
  • 可以重复
  • 左右两边插入弹出

API

API 作用 时间复杂度
rpush key value1 value2 ... valueN 从列表右端插入值(1-N个) O(1-N)
lpush key value1 value2 ... valueN 从列表左端插入值(1-N个) O(1-N)
linsert key before|after value newValue 在列表指定的值前|后插入newValue O(n)
rpop key 从列表右侧弹出一个元素 O(1)
lpop key 从列表左侧弹出一个元素 O(1)
lrem key count value 根据count值,从列表中删除所有value相等的项
(1)count>0,从左到右,删除最多count个value相等的项
(2)count<0,从右到左,删除最多Math.abs(count)个value相等的项
(3)count=0,删除所有value相等的项
O(n)
ltrim key start end 按照索引范围修剪列表,保留索引范围值 O(n)
lrange key start end(包含end) 获取列表指定索引范围所有元素(从右到左,最后一个元素的索引为-1) O(n)
lindex key index 获取列表指定索引的元素 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)

PS:

  • LPUSH + LPOP = Stack
  • LPUSH + RPOP = Queue
  • LPUSH + LTRIM = Capped Collection
  • LPUSH + BRPOP = Message Queue

Sets

集合结构

key values
user:1:follow music beer
book read

特点

  • 无序
  • 无重复
  • 支持集合间操作

API

集合内API

API 作用 时间复杂度
sadd key element1 element2...elementN 向集合key添加element(如果element已经存在,则添加失败) O(1-N)
srem key element 将集合key中的element元素移除 O(1)
scard key 计算集合key的大小 O(1)
sismember key element 判断element是否在集合key中(1:存在) O(1)
srandmember key count 从集合key中随机挑选count个元素
smembers key 获取集合key中所有元素,返回结果无序,小心使用
spop key 从集合key中随机弹出一个元素 O(1)

集合间API

API 作用
sdiff key1 key2 计算集合key1和集合key2的差集
sinter key1 key2 计算集合key1和集合key2的交集
sunion key1 key2 计算集合key1和集合key2的并集
sdiff|sinter|sunion store destkey 将差集|交集|并集结果保存在destkey中

PS:

  • SADD = Tagging
  • SPOP/SRANDMEMBER = Random item
  • SADD + SINTER = Social Graph

Sorted Sets

有序集合结构

key score value
user:ranking 51 abc
91 def
200 ghi
250 jkl
251 mno

集合 VS 有序集合

集合 有序集合
无重复元素 无重复元素
无序 有序
element element + score

列表 VS 有序集合

列表 有序集合
可以有重复元素 无重复元素
有序 有序
element element + score

API

API 作用 时间复杂度
zadd key score[可以重复] element[不可以重复]
【可以是多对】
添加score和element O(logN)
zrem key element【可以是多个】 删除元素 O(1)
zscore key element 返回元素的分数 O(1)
zincrby key increScore element 增加或减少元素的分数 O(1)
zcard key 返回有序集合key的元素个数 O(1)
zrank key element 返回有序集合key的元素element的升序排名 O(1)
zrange key start end [withscores] 返回指定索引范围内的升序元素【分值】 O(log(n)+m)
zrangebyscore key minScore maxScore [withscores] 返回指定分数范围内的升序元素【分值】 O(log(n)+m)
zcount key minScore maxScore 返回有序集合内在指定分数范围内的个数 O(log(n)+m)
zremrangebyrank key start end 删除指定排名内的升序元素 O(log(n)+m)
zremrangebyscore key minScore maxScore 删除指定分数内的升序元素 O(log(n)+m)
zrevrank key element 返回有序集合key的元素element的降序排名 O(log(n)+m)
zrevrange key start end [withscores] 返回指定索引范围内的降序元素【分值】 O(log(n)+m)
zrevrangebyscore key minScore maxScore 返回指定分数范围内的降序元素【分值】 O(log(n)+m)

最新文章

  1. Sqlite 存储自定义对象
  2. Arcgis创建SDE_Geometry、SDO_Geometry的区别【转】
  3. 【转】Spark性能优化指南——基础篇
  4. trace工具,c++/c#/python
  5. jqueryIFrame框架内元素操作
  6. Codeforces Beta Round #7 C. Line (扩展欧几里德)
  7. 结构体定义 typedef struct 用法详解和用法小结
  8. [Quick-x]制作新手引导高亮区域方法之一:混合模式
  9. c语言指针字符串与字符数组字符串的区别
  10. Python练习_更改配置文件(3)
  11. STL之如何选择顺序容器
  12. Android 使用GangSDK创建第三方家族公会系统经验分享
  13. 在ubuntu16.04中再次体验.net core 2.0
  14. 迭代DOM集合的几种方法
  15. 基于Ubuntu的ESP32平台搭建
  16. [contest 782] 9.7
  17. 概率校准与Brier分数
  18. Python中的None与Null(空字符)的区别
  19. 使用git将代码推到coding
  20. 数字证书在web应用中实现登陆

热门文章

  1. 基于verdaccio的npm私有仓库搭建
  2. Python3爬虫(2)_利用urllib.urlopen发送数据获得反馈信息
  3. [Nginx]Ubuntu18.04 安装配置Nginx1.13.6+FastDFS
  4. Java 实现一个 能够 进行简单的增删改查的 超市管理系统
  5. 在线热备份数据库之innobackupex 完整备份InnoDB
  6. iSCSI 共享存储
  7. 一、EditPlus 的安装 - Java软件的安装
  8. 基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作
  9. docker监控容器
  10. python Django框架正式准备工作