通用命令

  • 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. 哪种方式更适合在React中获取数据?

    作者:Dmitri Pavlutin 译者:小维FE 原文:dmitripavlutin.com 国外文章,笔者采用意译的方式,以保证文章的可读性. 当执行像数据获取这样的I/O操作时,你必须发起获取 ...

  2. 建议收藏:.net core 使用导入导出Excel详细案例,精心整理源码已更新至开源模板

    还记得刚曾经因为导入导出不会做而发愁的自己吗?我见过自己前同事因为一个导出改了好几天,然后我们发现虽然有开源的库但是用起来却不得心应手,主要是因为百度使用方案的时候很多方案并不能解决问题. 尤其是尝试 ...

  3. C函数库ctype.h概况

    1 字符测试函数 1> 函数原型均为int isxxxx(int) 2> 参数为int, 任何实参均被提升成整型 3> 只能正确处理处于[0, 127]之间的值 2 字符映射函数 1 ...

  4. C++STL整理

    STL整理 vector #include<bits/stdc++.h> #define go(i,a,b) for(int i=a;i<b;i++) using namespace ...

  5. Python Socket学习之旅(一)

    Socket概述 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向 网络发出请求或者应答网络请求. s ...

  6. Python——标识符的命名规则

    01 Python语言的特点 python的语言特点有很多,我们这里只讲一点,python是一门面向对象的语言,即一切皆对象(Linux中有一句是:一切皆文件),括号内的只是打个比方,不懂也没事,就是 ...

  7. python文件的基本操作

    打开文件的三种方式: open(r'E:\学习日记\python\code\文件的简单操作.py') open('E:\\学习日记\\python\\code\\文件的简单操作.py') open(' ...

  8. ARP通信

    ARP:地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议 简单介绍ARP通信过程: 1.发送端在与接收端进行数据通信转发时的过程: 发送端与接收端进行数据通信之前,需要先知道对端的MAC ...

  9. jvm与程序的生命周期

    yls 2019/11/5 java虚拟机结束生命周期的情况: 执行了System.exit(); 程序正常运行结束 程序在执行过程中遇到异常或错误而异常终止 由于操作系统出现错误而导致jvm进程终止 ...

  10. C#:转义字符 \n 和 \r 的区别

    1.\n,换行符,作用是换行符之后的字符换到下一行: 例如:1234/n567    得出的结果是1234 567 2.而\r,回车符,作用是回车符之后的字符会回到当前行的最前面,把回车符之前的字符覆 ...