通用命令

  • 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. gym102302E_Chi's performance

    题意 给n个二元组(v,p),要求排序使得v从小到大,而且总价值最大,价值定义为相邻两个v值不同的p值之差绝对值之和. 分析 in a row原来是相邻的意思. 对于每个相同v值的块来说,有用的数只有 ...

  2. 使用 HTML5 WebSocket 构建实时 Web 应用

    原文地址:http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/ HTML5 WebSocket 简介和实战演练 本文主要介绍 ...

  3. Pandas常用数据结构

    Pandas 概述 Pandas(Python Data Analysis Library)是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数 ...

  4. 建设城市(city):组合数,容斥原理

    想模一大堆人呢.考场上AC的大仙. 估计没人想给这题好好写一个题解吧,因为它的确挺简单的... 但是它对我来说一点都不简单啊!!! 至少出题人用脚写题解的时候肯定认为这道题是送分题了 容斥,枚举至少有 ...

  5. 史上最全 Java 中各种锁的介绍

    更多精彩原创内容请关注:JavaInterview,欢迎 star,支持鼓励以下作者,万分感谢. 锁的分类介绍 乐观锁与悲观锁 锁的一种宏观分类是乐观锁与悲观锁.乐观锁与悲观锁并不是特定的指哪个锁(J ...

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

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

  7. 通过cmd命令查看Python库、函数和模块的帮助文档与介绍

    dir函数式可以查看对象的属性 使用方法很简单,举os类型为例,在Python命令窗口输入 dir(‘os’) 即可查看os模块的属性 打开cmd命令窗口 输入python(注意:计算机需要有Pyth ...

  8. getchar()用法 【转】

    1.从缓冲区读走一个字符,相当于清除缓冲区 2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符 ...

  9. jdk8 函数式编程概念

    yls 2019/11/7 函数式接口 如果一个接口只有一个抽象方法,那么该接口就是函数式接口 如果我们在某接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义来 ...

  10. SpingBoot之集成Redis集群

    一.安装Redis集群 安装步骤参照网上教程,Mac安装步骤参照https://github.com/muyl/mac-docker-redis-cluster 二.创建SpringBoot工程 创建 ...