通用命令

  • 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. 分布式id生成方案总结

    本文已经收录自 JavaGuide (60k+ Star[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.) 本文授权转载自:https://juejin.im/post/ ...

  2. 利用python的requests和BeautifulSoup库爬取小说网站内容

    1. 什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约 ...

  3. [tesseract-ocr]OCR图像识别Ubuntu下环境包安装

    问题: ImportError: libSM.so.6: cannot open shared object file: No such file or directory 解决: sudo apt- ...

  4. EffectiveJava-3

    一.如果其他类型更适合,则尽量避免使用字符串 1. 字符串不适合代替枚举类型 2. 字符串不适合代替聚合类型,例如: String compoundKey = className+ "#&q ...

  5. (十二)golang--进制和位运算

    1.基本进制 (1)二进制:0,1,满2进1 在golang中,不能直接使用一个二进制表示一个整数,可以用八进制.十进制和十六进制表示 (2)十进制:0-9,满10进1 (3)八进制:0-7,满8进1 ...

  6. Python实现定时发送邮件代码

    mailtools.py代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2017/12/22 17:50 # @Desc : ...

  7. markdown 编辑器概述

    markdown 编辑器概述     编辑器其实很多很多,主要分为    网页编辑和软件编辑 (效果其实感觉效果差不多,看个人喜好,笔者个人还是喜欢本地,感觉方便挺多的) ## 网页编辑器 主要有 C ...

  8. [LC]783题 二叉搜索树结点最小距离(中序遍历)

    ①题目 给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值. 示例: 输入: root = [4,2,6,1,3,null,null]输出: 1解释:注意,root是树结点对象(T ...

  9. 用IDEA导入Eclipse的JavaWEB项目

    1.File----Open 2.选择项目路径 点击OK,这时候会弹出一个窗口,让你选择本窗口打开项目还是新建一个窗口,这个随意. 3.添加WEB框架 4.添加各种自己需要的jar包 5.添加Tomc ...

  10. nyoj 37-回文字符串(reverse, 动态规划, lcs)

    37-回文字符串 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:17 题目描述: 所谓回文字符串,就是一个字符串,从左到右读和从 ...