Redis 五大基础数据结构命令详细介绍

2023-11-16

一、Redis数据结构

Redis命令官网介绍

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:

基本类型:String、Hash、List、Set、Zset

特殊类型:GEO、BitMap、HyperLog等

  • String:
 Hello world
  • Hash
{name:"cy", age:"25"}
  • List
[A -> B -> C -> C]
  • Set
{A, B, C}
  • Zset
{A:1, B:2, C:3}
  • GEO
{A:(120.3,30.5)}
  • BitMap
0110110101110101011
  • HyperLog
0110110101110101011

二、Redis通用命令

通用命令是部分数据类型的,都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key
通过help[command]可以查看一个命令的具体用法,例如:

help keys

命令行会显示KEYS用法
  KEYS pattern
  summary: Find all keys matching the given pattern
  since: 1.0.0
  group: generic

KEYS *  查询所有,支持通配符”*“查询

  • DEL:删除一个指定的key
通过help[command]可以查看一个命令的具体用法,例如:

help DEL

命令行会显示DEL用法
  DEL key [key ...]
  summary: Delete a key
  since: 1.0.0
  group: generic

DEL k1 k2 k3  支持删除多个key值

  • EXISTS:判断key是否存在
EXISTS k1

命令行会显示是否存在,存在则返回1,不存在返回0
(integer) 0

  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
设置k1 20秒有效期
EXPIRE k1 20  

可以通过TTL命令查看key剩余时间,如果没有设置有效时间,则会返回-1,代表永久有效
TTL k1
  • TTL:查看一个KEY的剩余有效期
TTL key

三、String类型

3.1 String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m

KEY VALUE
msg hello world
num 10
score 90.5

3.2 String类型的常见命令

String类型的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对
  • GET:根据key获取String类型的value
  • MEST:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整形的key增1
  • INCRBY:让一个整形的key自增并指定步长,例如:incrby age 2 让age值增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  • SETEX:添加一个String类型的键值对,并且指定有效期

四、Redis-key的层级格式

4.1 key的结构

Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:

项目名:业务名:类型:id

这个格式并非固定,可以根据自己的需要来删除或添加词条。
例如我们的项目名叫做study,有user和order两种不同类型的数据,我们可以这样定义key:

  • user相关的key:study:user:11
  • order相关的key:study:order:11

如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:

KEY VALUE
study:user:11 {“id”:1, “name”:“cy”, “age”:“25”}
study:order:11 {“id”:1, “name”:“华为出口订单”, “price”:“500000”}
  1. String 类型的三种格式
  • 字符串
  • int
  • float
  1. Redis的key的格式
  • 【项目名】:【业务名】:【类型】:【id】

五、Hash类型

Hash类型,也叫散列,其Value是一个无序字典,类似于Java中的HashMap结构。
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段很不方便:

KEY VALUE
study:user:11 {“id”:1, “name”:“cy”, “age”:“25”}
study:order:11 {“id”:1, “name”:“华为出口订单”, “price”:“500000”}

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段CRUD:

KEY VALUE
field value
study:user:11 name cy
age 25
study:order:11 name 华为出口订单
price 500000

5.1 Hash类型的常用命令

Hash的常用命令有:

  • HSET key field value:添加或者修改hash类型key的field的值
  • HGET key field:获取一个hash类型的key的field的值
  • HMSET:批量添加多个hash类型的key的field的值
  • HMGET:批量获取多个hash类型key的field的值
  • HGETALL:获取一个hash类型的key中所有的field和value
  • HKEYS:获取一个hash类型的key中的所有value
  • HINCRBY:让一个hash类型key的字段值自增并指定步长
  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

六、List类型

Redis中的List类型与Java中的LinkedList类似,可以看作是一个双向链表结构。既可以支持正向检索也可以支持反向检索。
特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表、评论列表等。

6.1 List类型的常见命令

List的常见命令有:

  • LPUSH key element …:向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  • RPUSH key element…:向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil
 
 BLPOP key [key ...] timeout
  summary: Remove and get the first element in a list, or block until one is available
  since: 2.0.0
  group: list

获取对应key左侧第一个元素,且超时时间为10s,如果没有元素则阻塞10s,有则返回并删除该元素
BLPOP list1 10

获取对应key右侧第一个元素,且超时时间为10s,如果没有元素则阻塞10s,有则返回并删除该元素
BRPOP list1 10

6.2 举例

6.2.1 如何利用List结构模拟一个栈?
  • 入口和出口在同一边,先进后出,用LPSH、LPOP或者RPUSH、RPOP
6.2.2 如何利用List结构模拟一个队列?
  • 入口和出口在不同边,先进显出,用LUSH、RPOP或者RPUSH、LPOP
6.2.3 如何利用List结构模拟一个阻塞队列?
  • 入口和出口在不同边,先进后出,用LUSH、BRPOP或者RPUSH、BLPOP

七、Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

7.1 Set类型的常见命令

Set的常见命令有:

  • SADD key member …:向Set中添加一个或多个元素
  • SREM key member …:移除set中的指定元素
  • SCARD key:返回Set中元素的个数
  • SISMEMBER key member:判断一个元素是否存在于Set中
  • SMEMBERS key:获取Set中的所有元素
  • SINTER key1 key2:求key1与key2的交集
  • SDIFF key1 key2:求key1与key2的差集
  • SUINON key1 key2:求key1与key2的并集

八、Zset类型

Redis的Zset是一个可排序的Set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。Zset的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加Hash表。
Zset具备以下特性:

  • 可排序
  • 元素不重复
  • 查询速度快
    因为Zset的可排序性,经常被用来实现排行榜这样的功能。

8.1 Zset类型的常见命令

ZSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到Zset,如果已经存在则更新其score值
  • ZREM key member:删除ZSet中的一个指定元素
  • ZSCORE key member:获取Zset中的指定元素的score值
  • ZRANK key member:获取ZSet中的指定元素的排名
  • ZCARD key:获取ZSet中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让ZSet中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
  • ZDIFF、ZINTER、ZUINON:求差集、交集、并集

注意: 所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可。例如:ZREVRANGE key min max

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 五大基础数据结构命令详细介绍 的相关文章

随机推荐

  • 003 C++基础篇

    前言 大家好 本文将会向您介绍引用 定义 使用场景 引用与值分别作为返回值和参数时的性能比较 引用的权限 引用 一 引用是什么 引用 定义一个变量的别名 不是新定义一个变量 而是给已经存在的变量取了一个别名 编译器不会为引用变量单独开辟一个
  • WPF应用程序最小化到系统托盘

    using System using System Collections Generic using System ComponentModel using System Windows using System Windows Inpu
  • Unity3D跑酷游戏开发-游戏结束分数排名当前高能显示 (原创教程)

    一般游戏结束后都会有个分数排名板 接下来让分析这功能 1 游戏结束后显示高分排列 当前玩家分数高能显示 如果能进入排名板 2 数据必须持久化 切换场景 关闭开启游戏都要能用 流程 游戏结束后 调出排名板 1 取得上次的所有排名数据保存到li
  • elasticsearch查询

    环境 es1 3 eclipse jdk1 8 问题 刚开始用游标查询 再用游标获取数据 查询耗时较慢 解决办法 不使用游标查询 直接根据条件查询 es查询参考网址 https www cnblogs com chenyuanbo p 10
  • 数据库内连接、左外连接、右外连接中的on、and、where条件使用

    数据库各种连接方式的on and where条件使用 文章目录 前言 使用on条件 A为主表 使用on条件 B为主表 使用on and主表条件 使用on where主表条件 使用on and条件 a type lt gt 1 使用on wh
  • GOME-2 SIF 数据链接

    目录 一 xiao Jinfeng 文章GOME 2 SIF 数据链接 网站 说明 引用 网页预览 一 xiao Jinfeng 文章GOME 2 SIF 数据链接 网站 https acd ext gsfc nasa gov People
  • 支持向量机算法(SVM)详细讲解(含手推公式)(《机器学习》--周志华)

    前言 本人是一个本科到研究生都坚持本专业的人 但是 本科时间被狗吃了 目前还是小白一只 曾经以为考研之后要继续学习一技之长找个工作养活自己 当然 现在发现这都是自己想太多了 哈哈哈 读研之后才知道基础不好的人学习起来是多么困难 但是 既然选
  • 深度学习实战:使用 PyTorch 和序列到序列(Seq2Seq)模型进行机器翻译

    机器翻译是自然语言处理中的一个重要任务 它涉及将一种语言的文本转换为另一种语言的文本 序列到序列 Seq2Seq 模型是一种强大的深度学习模型 用于处理机器翻译任务 在本篇博客中 我们将使用 PyTorch 和 Seq2Seq 模型进行机器
  • 我00后,会Python,月薪5000,兼职1.5w

    当代年轻人的终极烦恼 没钱 主业收入不高但处处都要花钱 特别是今年以来 很多人会在后台问我 做些什么副业好 兼职写文 不知道上哪儿找单 自己也不一定写得好 做wei商 被朋友屏蔽 没有客源也出不了单 摆地摊 东西卖不出去反而倒贴了一笔钱 淘
  • vue中实现点击展开和收起功能(具有动画效果)

    vue中实现点击展开和收起功能 具有动画效果 html div class marketplace aside b div class marketplace aside show that item text div div
  • 一个好玩的小游戏——麻神之战

    题目 一种新的麻将 只留下一种花色 并且除去了一些特殊和牌方式 例如七对子等 规则如下 共有36张牌 每张牌是1 9 每个数字4张牌 你手里有其中的14张牌 如果这14张牌满足如下条件 即算作和牌 14张牌中有2张相同数字的牌 称为雀头 除
  • Java 同步JSON字符串至ES(Elasticsearch) 添加时间戳(@timestamp)、版本(@version) 字段

    解决方法 仿照logstash同步原理 对于同步json字符串 首先将其解析 然后添加时间戳和版本字段 或其他字段 打入es public void insertEs String jsonStr JSONObject jsonObject
  • 95-36-210-ChannelHandler-系统Channel-TimeoutHandler

    文章目录 1 概述 2 继承体系 3 IdleStateHandler 3 1 典型构造方法 3 2 初始化方法 initialize 3 3 销毁方法destroy 3 4 核心的调度任务 ReaderIdleTimeoutTask 1
  • QT的补充知识

    一 文件 QFile QT提供了QFile类用于对文件进行读写操作 也提供了其他的两个类 文本流 QTextSream 和数据流 QDataStream 文本流 QTextSream 用于对文本数据的处理 并且是以字为单位进行读 写 数据流
  • 获取执行计划——使用动态性能视图和AWR、Statspacks

    上一篇中讲了如何使用EXPLAIN PLAN方法来获取sql执行计划 这篇继续讲另两种方法 使用动态性能视图和AWR报告 一 使用动态性能视图 查询动态性能视图我们可以获取丰富的信息 包括执行计划与游标信息等等 下面罗列几个常用的v 视图
  • Python IDLE 自动提示功能

    Python27 Lib idlelib 目录下 config extensions def文件修改等待时间 AutoComplete enable 1 popupwait 2000 2000表示2秒 修改为0 AutoComplete p
  • 分享一个页面

    先看效果 看下代码
  • 34. 注入篇——Cookie注入

    Cookie注入原理 1 数据读取流程 对于WEB服务器而言 读取数据的流程是先取GET中的数据 如果GET中没有数据信息 那么再取POST中的数据 如果POST中也没有那么就会去取COOKIE中的数据 2 防注入系统的常例 系统一般只会对
  • flutter两个非常常用的布局小空间SizedBox和Divider

    SizedBox SizedBox是Flutter中的一个小部件 widget 用于创建具有指定尺寸的空白框 它通常用于调整和控制布局中的间距 大小和位置 SizedBox具有以下常用属性 width 指定SizedBox的宽度 heigh
  • Redis 五大基础数据结构命令详细介绍

    文章目录 一 Redis数据结构 二 Redis通用命令 三 String类型 3 1 String类型 也就是字符串类型 是Redis中最简单的存储类型 3 2 String类型的常见命令 四 Redis key的层级格式 4 1 key