redis 从0到1完整学习 (三):redis 数据结构

文章目录

  • 0. 概述
    • 0.1 简要介绍
  • 1. Strings
    • 1.1 常用命令
  • 2 Lists
    • 2.1 常用命令
  • 3. Sets
    • 3.1 常用命令
  • 4. Hashes
    • 4.1 常用命令
  • 5. Sorted sets
    • 5.1 常用命令
  • 6. Streams
    • 6.1 常用命令
  • 7. 参考


0. 概述

前情提要:
《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》

0.1 简要介绍

Redis 最新官网有关数据结构的介绍:Understand Redis data types。

按照最新的官网介绍,我这里提炼总结一下,Redis 的 key 一般是 String 类型,value 可以有如下类型:

  • Strings。 最基础的类型,不多解释
  • Lists。 按插入顺序排序的字符串列表
  • Sets。 字符串的无序集合(字符串不可重复),类似于Java HashSets、Python sets 等
  • Hashes。 键值对集合的类型。类似于 Python dict、Java HashMap。
  • Sorted sets。按照字符串元素关联的分数来进行排序的 Sets
  • Streams。 Redis 5.0 版本引入的一种新的数据类型,主要用于实现消息队列、日志、数据同步等。
  • Geospatial indexes。存储和处理地理位置信息。它可以将地理位置的经度和纬度编码为二维平面上的点,并支持根据距离或矩形区域查询附近的地理位置点。
  • Bitmaps。基于字符串位操作的集合。字符串是二进制安全的,并且最长可支持512M,所以它们可以用来存储2的32次方(512 * 1024 * 1024 * 8 )不同位的数据。
  • Bitfields。一种位字段数据类型。它允许用户在一个Redis字符串中存储、读取和修改不同长度的整数值。
  • HyperLogLog。用于对海量数据进行基数统计。

下面针对常用的一些命令进行介绍。

1. Strings

字符串类型,是Redis中最简单的存储类型,不超过 512 MB。根据字符串的格式不同,又可以分为:

  • string:普通字符串
  • int:整数类型
  • float:浮点类型

1.1 常用命令

- SET:添加或者修改键值对
- GET:根据 key 获取值
- MSET:批量添加多个键值对
- MGET:根据多个 key 获取多个值
- INCR:整型的 key 的值增1
- INCRBY: 整型的key增加指定步长
- INCRBYFLOAT:浮点类型的数字增指定步长
- SETNX:仅当这个 key 不存在才添加键值对
- SETEX:添加键值对,并且指定有效期

例如:

SET name "John"
GET name
SETNX user_id 123456
SETEX session 30 "user_id=123456&username=John"

2 Lists

List 结构是一种双端链表,支持在两端插入和删除元素。它具有以下特点:

  • 动态增长:当列表中的元素数量超过其容量时,Redis会自动扩容,使得列表的容量始终能够容纳当前元素数量。
  • 内存存储:Redis 的 List结构是在内存中存储的,因此读写速度非常快。
  • 支持多种操作:Redis 的 List 结构支持多种操作,如插入、删除、查找等。

2.1 常用命令

- LPUSH key value ... :向列表左侧插入一个或多个元素
- LPOP key:移除并返回列表左侧的第一个元素,没有则返回 nil
- RPUSH key value ... :向列表右侧插入一个或多个元素
- RPOP key:移除并返回列表右侧的第一个元素
- LRANGE key star end:返回一段角标范围内的所有元素
- BLPOP 和 BRPOP:给定列表内没有任何元素可供弹出的时候,连接将被阻塞,直到超时或有元素可弹出为止

例如:

LPUSH myqueue item1  
RPOP myqueue
BLPOP mylist 0  # 阻塞式获取列表 mylist 中的元素,直到有元素可弹出或超时时间为0(永久阻塞)

3. Sets

Redis 的 Sets 是一个无序的、不重复的元素序列。它底层其实是一个 value为 null 的hash表,所以添加、删除、查找的复杂度都是 O(1)。Redis Sets 提供的功能包括:

  • 添加一个或多个指定的 member 元素到集合中。
  • 判断某个成员是否在一个 set 集合内。
  • 对集合进行交集、并集、差集等操作。

3.1 常用命令

- SADD key member [member ...]:命令用于向集合中添加一个或多个元素。如果集合不存在,则会创建一个新的集合
- SADD key member [member ...] : 移除指定元素
- SCARD key: 返回集合的成员数
- SISMEMBER key member:判断一个元素是否存在于集合中
- SMEMBERS:返回集合的所有元素
- SINTER key1 key2 ... :求key1与key2的交集

例子:

SADD myset "apple" "banana" "cherry"
SCARD myset
SISMEMBER myset "banana"

4. Hashes

通过键值对的形式保存数据。在 Redis 中,Hashes 可以被视为 Java 中的HashMap,通过 key-value 的形式保存数据。

4.1 常用命令

Hash的常见命令有:

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

例子:

HSET user:1 name "John"  
HSET user:1 age 25  
HSET user:1 address "New York"HGET user:1 name
HGETALL user:1

5. Sorted sets

Sorted sets 是一个可排序的 Set 集合。Sorted sets 中的每一个元素都带有一个 score 属性,可以基于 score 属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

Sorted sets 具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

5.1 常用命令

Sorted sets 的常见命令有:

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

例如:
假设我们有一个 Sorted sets,成员是游戏玩家的得分,我们需要根据得分对玩家进行排序。使用 ZADD 命令将玩家的得分添加到 Sorted sets 中:

ZADD players 90 "Alice"
ZADD players 80 "Bob"
ZADD players 85 "Charlie"

接下来,使用 ZRANGE 命令获取所有成员及其分数:

ZRANGE players 0 -1 WITHSCORES

这将返回 “players” Sorted sets 中所有成员及其分数,按分数从小到大排序。

想要查找特定得分的玩家,我们可以使用 ZRANGEBYSCORE 命令:

ZRANGEBYSCORE players 80 90 WITHSCORES

返回 “players” Sorted sets 中分数在80到90之间的所有成员及其分数。

6. Streams

Redis Streams 允许存储和检索大量的数据。

6.1 常用命令

Streams 的常见命令有:

- XADD stream_name field value [field value ...]:创建 Stream。其中,stream_name 是 Stream 的名称,field 是数据的字段,value 是字段的值,可以一次添加多个字段和值
- XREAD COUNT 0 STREAMS stream_name [stream_name ...] ID [ID ...]:读取 Stream。其中,COUNT 是读取的记录数量,0表示读取所有记录;STREAMS 是要读取的 Stream 的名称;ID 是你要读取的记录的 ID。可以指定要读取的记录的 ID 范围。
- XDEL stream_name [id [id ...]]:删除 Stream。其中,stream_name 是 Stream 的名称;id 是要删除的记录的 ID。可以指定要删除的记录的 ID 范围。

例子:
假设我们有一个名为 “my_stream” 的 Stream,用于存储用户的登录记录。

  1. 创建 Stream:
XADD my_stream *user_id 123 *timestamp 1625555555

这个命令将一个记录添加到 “my_stream” 中,包含字段 “user_id” 和 “timestamp”,它们的值分别为 123 和 1625555555。

  1. 读取 Stream:
XREAD COUNT 1 STREAMS my_stream 0

这个命令从 “my_stream” 中读取一条记录,起始 ID 为0。

  1. 删除 Stream 中的记录:
XDEL my_stream 1625555555

这个命令从 “my_stream” 中删除 ID 为1625555555的记录。

7. 参考

Understand Redis data types
《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+Redis的Bloom过滤器

1.保姆级Linux安装Redis ①把redis.tar.gz下载到linux中,并用命令tar -zxvf安装 ②安装完成进入目录输入make进行编译,编译完成后输入make install 进行安装 ③创建两个文件夹mkdir bin mkdir etc 将redis目录下的redis.conf文件移动到etc文件中&…

普通相机标定——OpenCV函数讲解(下)

cv::projectPoints void cv::projectPoints(InputArray objectPoints, InputArray rvec, InputArray tvec, InputArray cameraMatrix, InputArray distCoeffs, OutputArray imagePoints, OutputArray jacobian = noArray(), double aspectRatio = 0 ) /** @brief 将世界坐标系中…

Modbus-TCP数据帧

Modbus-TCP基于4种报文类型 MODBUS 请求是客户机在网络上发送用来启动事务处理的报文MODBUS 指示是服务端接收的请求报文MODBUS 响应是服务器发送的响应信息MODBUS 证实是在客户端接收的响应信息 Modbus-TCP报文: 报文头MBAP MBAP为报文头,长度为7字节&#xff0c…

设计模式(三)-结构型模式(6)-享元模式

一、为何需要享元模式(Flyweight)? 假如在网页中渲染这样的一个画面:大小不一的星星铺满了整个画布,并且都在不断的进行移动闪烁着。一批星星消失了,另一批又从另一边缘处出现。 要实现这样的渲染效果,在…

DshanMCU-R128s2 配置引脚复用

本文中的约定 描述 GPIO 配置的形式&#xff1a;Port:端口 组内序号<功能分配><内部电阻状态><驱动能力><输出电平状态>文中的 <X>0,1,2,3,4,5…..&#xff0c;如 twi0&#xff0c;twi1….&#xff1b;uart0&#xff0c;uart1….。文中的 {PRO…

『居善地』接口测试 — 20.Mock功能介绍

1、Mock功能介绍 各个业务系统都会关联多个三方系统接口调用&#xff0c;在测试过程中第三方业务存在不能及时提供接口调用&#xff0c;这时就需要用到我们的mock服务了。 Mock的本质在于模拟三方业务接口的返回&#xff0c;来满足自身的测试功能&#xff0c;快速完成测试任务…

The engine “node“ is incompatible with this module.解决方法

安装依赖库报如下异常 [2/4] Fetching packages... error marked11.1.0: The engine "node" is incompatible with this module. Expected version "> 18". Got "16.14.0" error Found incompatible module. info Visit https://yarnpkg.com…

docker安装ES:7.8和Kibana:7.8

本文适用于centos7,快速入手练习es语法 前置&#xff1a;安装docker教程docker、docker-component安装-CSDN博客 1.安装es 9200为启动端口&#xff0c;9300为集群端口 docker pull elasticsearch:7.8.0mkdir -p /mydata/elasticsearch/pluginsmkdir -p /mydata/elasticsear…

python核心阶段(七)—— 包&模块以及虚拟环境

1.包&模块 概念解释 模块&#xff1a;为了使代码容易维护&#xff0c;可以将一组功能相关的代码写入一个单独的.py文件中&#xff0c;这 个.py文件就被称作一个模块 包&#xff1a; 包是指一个有层次的文件目录结构&#xff0c;它包含多个相关模块或子包&#xff1b; 它…

李群与李代数

群实际上就是一个特殊的集合&#xff0c;这个集合满足几个特点&#xff1a; 封闭性&#xff0c;就是对某种运算封闭&#xff0c;两个元素运算的结果仍然属于该集合结合性&#xff0c;结合律幺元&#xff0c;也就是存在一个“1”逆&#xff0c;也就是逆也在该集合中&#xff0c…

基于MybatisPlus批量高效插入百万条数据

引言 在JAVA程序开发中&#xff0c;对数据库进行大量数据插入是一个常见的操作&#xff0c;作为一个软件开发工程师&#xff0c;大批量的数据处理是日常工作&#xff0c;如何优化插入性能&#xff0c;提升数据处理效率是对大多数工程师的一个重要考验。本文将围绕逐条插入和批…

随时随地安心工作:迅软DSE保护您手机办公中的关键数据

互联网的快速发展让移动办公成为了日常工作中的一部分&#xff0c;同时企业数据加密的需求也已经不仅仅局限于内部终端&#xff0c;对于灵活的手机移动端也同样需要进行合法合规的数据安全管控。 迅软DSE数据防泄密系统提供移动端管理模块&#xff0c;支持Android、IOS移动客户…

BearPi Std 板从入门到放弃 - 引气入体篇(11)(SPI驱动 TFT LCD(ST7789))

简介 SPI 驱动 ST7789V2 进行字符显示, 并且使用中文库显示中文信息。主芯片: STM32L431RCT6LED : PC13 \ 推挽输出即可 \ 高电平点亮串口: Usart1 / LPUARTSPI(与LCD数据传输) : SPI2LCD_RESET&#xff08;复位引脚&#xff09;: PC7 \ 推挽输出即可 LCD_POWER&#xff08;…

通过几个基本概念说一下为什么openGauss是当下之选?

Database、Schema、User都是数据库的基本概念&#xff0c;SQL标准中也有明确规范。但不同数据库的具体实现也不尽相同&#xff0c;有些甚至大相径庭。这就导致用户在做国产化选型和数据库迁移时可能会遇到种种困难。本文从这几个基本概念展开&#xff0c;说说为什么openGauss系…

ne_110m_admin_0_countries_1

由于sql太大&#xff0c;所以分成了4份 ne_110m_admin_0_countries_1-CSDN博客 ne_110m_admin_0_countries_2-CSDN博客 ne_110m_admin_0_countries_3-CSDN博客 ne_110m_admin_0_countries_4-CSDN博客 insert into sde.ne_110m_admin_0_countries (objectid,featurecla,sc…

CHARLS CLHLS CFPS公共数据库, 最新文章|周报(12.6)

欢迎参加郑老师2023年孟德尔随机化课程即将开始 发表文章后退款&#xff01;郑老师科研统计课程详情 CHARLS公共数据库 CHARLS数据库简介中国健康与养老追踪调查(China Health and Retirement LongitudinalStudy&#xff0c;CHARLS)是一项持续的纵向调查&#xff0c;旨在调查中…

Stable Diffusion Windows 部署简单认知

写在前面 偶然看到&#xff0c;简单了解博文为 SD 部署&#xff0c;以及简单使用&#xff0c;部署过程遇到问题解决理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。…

基于html+javascript开发的base64解码工具

base64在线解码工具可以帮助你将Base64编码的字符串解码为原始的文本或数据。 预览入口 以下是一个简单的base64在线解码工具的示例&#xff1a; html <!DOCTYPE html> <html> <head> <title>Base64在线解码工具</title> </head>…

pnpm :无法加载文件 D:\nodejs\node_global\pnpm.ps1,因为在此系统上禁止运行脚本

目录 一、问题描述 二、原因分析 三、解决问题 一、问题描述 pnpm : 无法加载文件 D:\learningsoftware\nodejs\node_global\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID1351 70 中的 a…

大象机器人发布万元级水星Mercury人形机器人产品系列,联结未来,一触即达!

十四五机器人产业发展规划指出机器人的研发、制造、应用是衡量一个国家科技创新和高端制造业水平的重要标志。当前&#xff0c;机器人产业蓬勃发展&#xff0c;正极大改变着人类生产和生活方式&#xff0c;为经济社会发展注入强劲动能。 人形机器人作为机器人产业中重要的一环&…