通用命令

  • 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)

redis - redis数据结构与API的更多相关文章

  1. Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数

    1.Redis和nosql简介,api调用 14.1/ nosql介绍 NoSQL:一类新出现的数据库(not only sql),它的特点: 1.  不支持SQL语法 2.  存储结构跟传统关系型数 ...

  2. redis各种数据结构使用场景

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  3. php数组去重、魔术方法、redis常用数据结构及应用场景

    一.用函数对数组进行去重的方法 1.arrau_unique函数的作用 移除数组中重复的值. 将值作为字符串进行排序,然后保留每个值第一次出现的健名,健名保留不变. 第二个参数可以选择排序方式: SO ...

  4. redis基础数据结构及编码方式

    redis基础数据结构和编码方式 一.基础数据结构 1)简单动态字符串 2)双端链表 3)字典 4)跳跃表 5)整数集合 6)压缩列表 二.对象类型与编码 在redis的数据库中创建一个新的键值对时, ...

  5. Redis底层数据结构详解

    上一篇说了Redis有五种数据类型,今天就来聊一下Redis底层的数据结构是什么样的.是这一周看了<redis设计与实现>一书,现来总结一下.(看书总是非常烦躁的!) Redis是由C语言 ...

  6. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  7. Redis基本数据结构总结之STRING和LIST

    Redis基本数据结构总结前言 Redis的特点在于其读写速度特别快,因为是存储在内存中的,其非常适合于处理大数据量的情况:还有一个是其不同于其他的关系型数据库,Redis是非关系型数据库,也就是我们 ...

  8. Redis基本数据结构总结之SET、ZSET和HASH

    Redis基本数据结构总结 前言 Redis的特点在于其读写速度特别快,因为是存储在内存中的,其非常适合于处理大数据量的情况:还有一个是其不同于其他的关系型数据库,Redis是非关系型数据库,也就是我 ...

  9. Redis各种数据结构性能数据对比和性能优化实践

    很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. ...

随机推荐

  1. xml 需要转义的字符

    XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符 ...

  2. git命令--subtree

    目录 git命令--subtree subtree 主要命令 git subtree add   --prefix=<prefix> <commit> git subtree ...

  3. Linux修改主机名!(图文)

    本篇作为之前的补充篇,如果想修改自己的主机名,方便老师检查作业是否是自己做的,可以用修改主机名的方法,那么怎么修改呢? 一. 使用hostname命令 比如我现在的主机名是haozhikuan-hbz ...

  4. Promise对象及它在js中的执行顺序

    关于Promise对象的学习及它的执行顺序 学习阮一峰老师的ES6入门后的记录 1.promise的定义 promise是一个对象,通常包裹着一个异步操作,promise对象提供一些接口的方法,返回一 ...

  5. git 生成密匙时遇到报错 :Too many arguments.

    今天在我用新电脑想要向github上的远程库上传项目时,由于新电脑上的本地库没有与远程库建立连接,所以要在本地生成密匙添加到github上才可以上传,在我执行命令 ssh-keygen -t rsa- ...

  6. CSP-S 46 题解

    改完题了,就稍写一下题解,顺便反思一下! 其实这次考试挺水的,然而我也挺水的,看了考试结束后的成绩,就吃-*了! T1 set 这个我考试的时候实在是没有想到如何去判断-1,然后我就觉得这神仙题没法解 ...

  7. Linux JDK 安装与配置

    一.下载 JDK 官网链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 系 ...

  8. go中的数据结构字典-map

    1. map的使用 golang中的map是一种数据类型,将键与值绑定到一起,底层是用哈希表实现的,可以快速的通过键找到对应的值. 类型表示:map[keyType][valueType] key一定 ...

  9. python3 控制安卓手机的飞行模式遇到的问题汇总

    一.首先调通电脑对手机能落实 adb shell命令 验证通过标准:控制wifi开关的命令,能让wifi功能开启和关闭 (adb shell svc wifi enable   和   adb she ...

  10. [LC]83题 Remove Duplicates from Sorted List(删除排序链表中的重复元素)(链表)

    ①英文题目 Given a sorted linked list, delete all duplicates such that each element appear only once. Exa ...