1、redis 支持如下5种数据结构
数据结构 说明 简介
String 字符串 key-val
Hash 哈希 filed-val 映射表
List 列表 双向链表
Set 集合 element(元素无重复)
Sorted Set 有序集合 element+score(元素无重复+分值)
2、通用命令
命令 作用 时间复杂度
keys pattern 查找所有符合匹配的key O(n)
dbsize 返回当前数据库的数量 O(1)
flushdb 清空当前数据库所有key O(n)
flushall 清空所有数据库所有key O(n)
type key 返回key的数据类型 O(1)
rename key new_key 修改key名称 O(1)
exists key 检查给定key是否存在 O(1)
del key 删除key O(1)
expire key seconds 给key设定过期时间 O(1)
ttl key 查看key剩余过期时间 O(1)
persist key 移除key剩余过期时间 O(1)
3、String
命令 作用 时间复杂度
set key val 设置key val O(1)
get key 获取key O(1)
del key 删除key O(1)
set key val xx 更新key(不存在key时更新失败) O(1)
setnx key val key不存在时设置key O(1)
setex key val seconnds 设置key并设置过期时间 O(1)
mset key1 val1 key2 val2 ... 批量设置key O(n)
mget key1 key2 ... 批量获取key O(n)
incr key val key自增1;key不存在,set key val后自增1 O(1)
decr key val key自减1;key不存在,set key val后自减1 O(1)
incrby key n key自增k;key不存在,set key val后自增k O(1)
decrby key n key自减k;key不存在,set key val后自减k O(1)
getset key val set key val并返回旧的值 O(1)
append key val 给key追加值val O(1)
strlen key 获取key长度 O(1)
incrbyfloat key f 给key增加小数 O(1)
setrange key offset val 用val从offset开始覆盖 O(1)
getrange key start end 获取指定区间的val O(1)
4、Hash
命令 作用 时间复杂度
hset key filed val 设置key filed val O(1)
hget key filed 获取key filed O(1)
hdel key filed 删除key filed O(1)
hexists key filed 检测key filed是否存在 O(1)
hlen key 获取key属性值个数 O(1)
hsetnx key filed key filed不存在时设置key filed O(1)
hincrby key filed n key filed自增/自减(n可以为负数) O(1)
hincrbyfloat key filed f key filed自增/自减(f可以为负数) O(1)
hmset key filed1 val1 filed2 val2 ... 批量设置key filed O(n)
hmget key filed1 filed2 ... 批量获取key filed O(n)
hgetall key 获取key所有filed值 O(n)
hgetkeys key 获取key所有filed key O(n)
hgetvals key 获取key所有filed val O(n)
5、List
命令 作用 时间复杂度
lpush key val1 val2 ... 从头部插入一个/多个val O(1~n)
lpop key 移除并返回头部第一个元素 O(1)
rpush key val1 val2 ... 从尾部插入一个/多个val O(1~n)
rpop key 移除并返回尾部第一个元素 O(1)
lrang key start end 返回指定区间元素 O(s+n) s为偏移量, n=e-s
ltrim key start stop 对列表进行修剪, 保留指定区间的元素 O(n)
llen key 获取key长度 O(1)
lset key index val 设置指定索引index val O(1~n)
linsert key before/after existing_val new_val 在指定存在值之前/之后插入元素 O(n)
lindex key position 获取指定position元素 O(1~n)
lrem key count val 移除与count相等的val O(n)
lpushx key val1 val2 ... 从头部插入一个/多个已存在列表的val O(1~n)
rpushx key val1 val2 ... 从尾部插入一个/多个已存在列表的val O(1~n)
blpop key seconds 阻塞式lpop O(1)
brpop key seconds 阻塞式rpop O(1)
  • 常见场景
场景 命令方法
栈(Stack) lpush + lpop
队列(Queue) lpush + rpop
固定列表(Capped Collection) lpush + ltrim
消息列表(Message Queue) lpush + brpop
6、集合
命令 作用 时间复杂度
sadd key val1 val2 ... 向集合添加一个/多个元素(已存在元素则忽略) O(n)
smembers key 获取所有集合元素 O(n)
sismember key val1 检测集合元素是否存在 O(1)
srandmember key {count} 随机获取指定个数集合元素(不会删除) O(1~n)
spop key 随机移除一个集合元素并返回(会删除) O(1)
srem key val val1 ... 删除集合元素 O(1~n)
smove key key1 val 将key集合中val移到key1集合 O(1)
scard key 获取集合数量 O(1)
sinter key key1 ... 获取集合交集 O(n)
sunion key key1 ... 获取集合并集 O(n)
sdiff key key1 ... 获取集合差集 O(n)
sinterstore new_key key key1 ... 获取集合交集并存储到新集合 O(n)
sunionstore new_key key key1 ... 获取集合并集并存储到新集合 O(n)
sdiffstore new_key key key1 ... 获取集合差集并存储到新集合 O(n)
7、有序集合
命令 作用 时间复杂度
zadd key score val ... 向集合添加一个/多个元素 O(log(N) * M) M 元素个数
zcard key 获取集合数量 O(1)
zscore key val 获取元素分数值 O(1)
zcount key mix max 获取分数区间[mix, max]集合元素数量 O(log(N) + M)
zlexcount key mix max 获取元素字典区间[mix, max]集合元素数量 O(log(N) + M)
zincrby key score val 集合元素val自增/自减分数score O(log(N))
zrank key val 获取集合元素val的排名(从小到大) O(log(N))
zrevrank key val 获取集合元素val的排名(从大到小) O(log(N))
zrange key start end [withscores] 获取指定区间分数排名(从小到大)元素 O(log(N) + M)
zrevrange key start end [withscores] 获取指定区间分数排名(从大到小)元素 O(log(N) + M)
zrangebyscore key min max [withscores] 获取指定区间分数排名(从小到大)元素 O(log(N) + M)
zrevrangebyscore key max min [withscores] 获取指定区间分数排名(从大到小)元素 O(log(N) + M)
zrangebylex key min max 获取字典区间内集合元素 O(log(N) + M)
zrem key val val1 ... 删除集合元素 O(log(N) * M)
zremrangebyscore key min max 删除指定区间分数区间元素 O(log(N) + M)
zremrangebyrank key start stop 删除指定排名rank内元素 O(log(N) + M)
zremrangebylex key min max 删除字典区间内集合元素 O(log(N) * M)
zinterstore new_key n key key1 ... 获取集合交集存储到new_key(n 集合个数) O(N K)+O(M log(M))
zunionstore new_key n key key1 ... 获取集合并集存储到new_key(n 集合个数) O(N)+O(M log(M))

PS: 更多文章请关注微信公众号:浮话

redis5.0 数据结构与命令的更多相关文章

  1. Streams:深入剖析Redis5.0全新数据结构

    Streams:深入剖析Redis5.0全新数据结构   原创: 阿飞的博客   Redis 5.0 全新的数据类型:streams,官方把它定义为:以更抽象的方式建模日志的数据结构.Redis的st ...

  2. 基于.NetCore的Redis5.0.3(最新版)快速入门、源码解析、集群搭建与SDK使用【原创】

    1.[基础]redis能带给我们什么福利 Redis(Remote Dictionary Server)官网:https://redis.io/ Redis命令:https://redis.io/co ...

  3. redis5.0主从配置

    1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz .tar.gz cd redis- make make test //检查 ...

  4. Redis5.0:在这些场景使用,高效率还低成本!

    很多大型电商网站.视频直播和游戏应用等,存在大规模数据访问,对数据查询效率要求高,且数据结构简单,不涉及太多关联查询. 这种场景使用Redis,在速度上对传统磁盘数据库有很大优势,能够有效减少数据库磁 ...

  5. 干货来袭:Redis5.0支持的新功能说明

    Redis5.0支持的新特性说明 本文内容来自华为云帮助中心 华为云DCS的Redis5.x版本继承了4.x版本的所有功能增强以及新的命令,同时还兼容开源Redis5.x版本的新增特性. Stream ...

  6. Redis5.0之Stream案例应用解读

    非常高兴有机会和大家在这里交流Redis5.0之Stream应用.今天的分享更多的是一个抛砖引玉,欢迎大家提出更多关于Redis的思考. 首先,我们来个假设,这里有个杯子,这个杯子是去年我老婆送的,送 ...

  7. Streams:深入理解Redis5.0新特性

    概述 相较于Redis4.0,Redis5.0增加了很多新的特性,而streams是其中最重要的特性之一.streams是redis 的一种基本数据结构,它是一个新的强大的支持多播的可持久化的消息队列 ...

  8. 编译安装redis-5.0.4

    编译安装为redis官方推荐安装方式. 本例中使用linux版本为:CentOS Linux release 7.0.1406 (Core),Basic Web Server 一.安装依赖包 yum ...

  9. 【redis】redis5.0的一些新特性

    redis5.0总共增加了12项新特性,如下: 1.新增加的Stream(流)数据类型,这样redis就有了6大数据类型,另外五种是String(字符串),Hash(哈希),List(列表),Set( ...

随机推荐

  1. 路由器配置——路由重分布1(rip)

    一.实验目的:使用路由重分布达到全网互通 二.拓扑图: 三.具体实验步骤配置 先给各个主机配置ip地址和网关以PC1为例: (1)R1路由器配置 Router>enable  --进入特权模式R ...

  2. CUDA-F-5-5-常量内存

    title: [CUDA 基础]5.5 常量内存 categories: - CUDA - Freshman tags: - CUDA常量内存 - CUDA只读缓存 toc: true date: 2 ...

  3. Eclipse一直building workspace问题解决

    今天新导入了一个maven项目,但是总是一直building workspace 解决方案: 去掉图中Maven  Project Builder勾选

  4. vue-cli 3.x 修改dist路径和在本地查看方法

    打包文件路径问题 需要在项目的根目录添加一个vue.config.js.在这个文件中,我们可以进行一些个性化定制. module.exports = { // 基本路径 baseUrl: './', ...

  5. luogu4281

    P4281 [AHOI2008]紧急集合 / 聚会 题目描述 欢乐岛上有个非常好玩的游戏,叫做“紧急集合”.在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道 ...

  6. Postman请求运行顺序及Workflow

    作为一款接口调试利器, Postman的更新迭代速度很快, 不断加入了很多新的功能.使的api设计,测试,监控, Mock,以及团队协作更加方便. 修改执行顺序 在遇到有接口依赖的情况, 我们往往需要 ...

  7. Python中send和sendall的区别

    官方文档对socket模式下的socket.send() 和 socket.sendall()解释如下: sock.sendall(string[, flags]) Send data to the ...

  8. BZOJ1070: [SCOI2007]修车(最小费用最大流,思维)

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...

  9. How to delete System Profiles for those registered with Red Hat Subscription Management (RHSM)?

    Environment Red Hat Customer Portal Certificate Based Subscription Red Hat Subscription Management ( ...

  10. [Java读书笔记] Effective Java(Third Edition) 第 3 章 对于所有对象都通用的方法

    第 10 条:覆盖equals时请遵守通用约定 在不覆盖equals方法下,类的每个实例都只与它自身相等. 类的每个实例本质上都是唯一的. 类不需要提供一个”逻辑相等(logical equality ...