redis5.0 数据结构与命令
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 数据结构与命令的更多相关文章
- Streams:深入剖析Redis5.0全新数据结构
Streams:深入剖析Redis5.0全新数据结构 原创: 阿飞的博客 Redis 5.0 全新的数据类型:streams,官方把它定义为:以更抽象的方式建模日志的数据结构.Redis的st ...
- 基于.NetCore的Redis5.0.3(最新版)快速入门、源码解析、集群搭建与SDK使用【原创】
1.[基础]redis能带给我们什么福利 Redis(Remote Dictionary Server)官网:https://redis.io/ Redis命令:https://redis.io/co ...
- redis5.0主从配置
1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz .tar.gz cd redis- make make test //检查 ...
- Redis5.0:在这些场景使用,高效率还低成本!
很多大型电商网站.视频直播和游戏应用等,存在大规模数据访问,对数据查询效率要求高,且数据结构简单,不涉及太多关联查询. 这种场景使用Redis,在速度上对传统磁盘数据库有很大优势,能够有效减少数据库磁 ...
- 干货来袭:Redis5.0支持的新功能说明
Redis5.0支持的新特性说明 本文内容来自华为云帮助中心 华为云DCS的Redis5.x版本继承了4.x版本的所有功能增强以及新的命令,同时还兼容开源Redis5.x版本的新增特性. Stream ...
- Redis5.0之Stream案例应用解读
非常高兴有机会和大家在这里交流Redis5.0之Stream应用.今天的分享更多的是一个抛砖引玉,欢迎大家提出更多关于Redis的思考. 首先,我们来个假设,这里有个杯子,这个杯子是去年我老婆送的,送 ...
- Streams:深入理解Redis5.0新特性
概述 相较于Redis4.0,Redis5.0增加了很多新的特性,而streams是其中最重要的特性之一.streams是redis 的一种基本数据结构,它是一个新的强大的支持多播的可持久化的消息队列 ...
- 编译安装redis-5.0.4
编译安装为redis官方推荐安装方式. 本例中使用linux版本为:CentOS Linux release 7.0.1406 (Core),Basic Web Server 一.安装依赖包 yum ...
- 【redis】redis5.0的一些新特性
redis5.0总共增加了12项新特性,如下: 1.新增加的Stream(流)数据类型,这样redis就有了6大数据类型,另外五种是String(字符串),Hash(哈希),List(列表),Set( ...
随机推荐
- learning armbian steps(9) ----- armbian 源码分析(四)
在上一节的分析当中,我们知道是通过对话框来选择到底编译的是哪块板子,基于什么样的配置. 接下来我们来拿一个实例来分析一下具体的案例,我们会选中如下所示的版本 iotx-3 AM335X 1Gb SoC ...
- Sqlite3错误:Recursive use of cursors not allowed 的解决方案
感悟] 写完这篇日志后,有调了一段时间程序,又有了一点心得分享下: 一)爬稳定的数(dong)据(xi)最好存储下来,特别是数据库在国外的那种,下载时间成本太高昂了,存起来再处理,会节约很多时间: 二 ...
- Java中final、finally、finalize
简述 final 可以用来修饰类.方法.变量,分别有不同的意义: final 修饰的 class 代表不可以继承扩展: final 的变量是不可以修改的:final 的方法也是不可以重写的(overr ...
- JDK快捷安装,以及详细安装步骤
一,直接快捷安装 安装JDK之前先打开终端输入以下内容检查是否有JDK环境 java javac java -version 输入完弹出一堆东西就是安装完成了 如果安装可以使用 rpm -qa | g ...
- 【洛谷2053】 [SCOI2007]修车(费用流)
传送门 洛谷 Solution 考虑把每一个修车工人拆成\(n\)个点,那么考虑令\(id(i,j)\)为第\(i\)个工人倒数第\(j\)次修车. 然后就可以直接跑费用流了!!! 代码实现 /* m ...
- leetcode题目142.环形链表Ⅱ(中等)
题目描述: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 p ...
- input控件的checkbox属性自定义勾选框
思路 首先隐藏input默认勾选框 通过绑定label标签,设置label的样式来设置勾选框 效果 在这里插入图片描述代码 # html中input的checkbox定义,使用for循环创建多个 ...
- 项目中遇到的关于Java的问题
1.Collections对List集合中的数据进行排序 http://blog.csdn.net/veryisjava/article/details/51675036 2.Java随机数 http ...
- LeetCode 240. 搜索二维矩阵 II(Search a 2D Matrix II)
题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 m ...
- MySQL Cluster 集群部署
前言 此篇博客用以介绍 MySQL Cluster 集群部署方法 一.节点规划 序号 IP地址 节点名称 1 172.16.1.201 mysql-manage 2 172.16.1.202 mysq ...