百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Redis 数据类型和命令大全

wptr33 2025-01-05 20:32 22 浏览

Redis 是一种速度非常快的非关系型数据库解决方案。其简单的键值数据模型使 Redis 能够处理大型数据集,同时保持令人印象深刻的读写速度和可用性。Redis 允许您使用各种数据类型(例如列表、哈希、集合和排序集合)来存储和管理数据。

在本教程中,了解Redis 数据类型的工作原理并掌握每种数据类型的基本命令

Redis 数据类型

键值数据库通过一个唯一的键对应数据对象的数据。使用该键来管理和检索分配给该特定键的值。任何大小不超过 512 MB 的二进制序列都可以用作 Redis 键,然后与简单的字符串或其他抽象数据结构相关联。

Redis 键通过使用七种不同数据类型之一映射到值:

  • 字符串
  • 列表
  • 哈希值
  • 集合
  • 排序集合
  • 基数统计
  • 位图 (BitStrings)

字符串

字符串表示可以附加到键的最小值。字符串值的最大允许大小为 512 MB,包含任何字符序列。在Redis中,键值对的键部分也是一个字符串。

使用这种数据结构的数据库通常被称为字符串到字符串键值存储。

由于所有数据都在一个对象中,Redis 中的字符串操作非常快。基本的 Redis 命令,如SETGETDEL允许您对字符串值执行基本操作。

  • SET key value – 设置指定键的值。
  • GET key – 检索指定键的值。
  • DEL key – 删除给定键的值。

以下示例说明了如何在redis-cli交互式 shell 中使用这些简单的命令。该SET命令将值添加到键,同时该GET命令获取并显示该值。如果没有值映射到键,则GET命令的输出为(nil)

如果存在某个值,则该DEL命令的输出将显示要删除的项目数。添加新的键和值不会影响数据库性能或处理速度。

用例:字符串主要用于缓存 HTML 元素、小部件,甚至整个网页。会话和用户特定数据存储在内存中,以加快和增强网站浏览体验。Redis 字符串还可以促进资源分配,作为对消息传递或流量平衡应用程序的补充。

列表

Redis 允许您将有序的字符串序列与键相关联。这个字符串链表允许您执行一组操作,例如:

  • LPUSH – 将值推送到列表的左端。
  • RPUSH – 将值推送到列表的尾端。
  • LRANGE – 检索一系列项目。
  • LPOP/RPOP – 用于显示和移除两端的项目。
  • LINDEX – 从列表中的特定位置获取值。

使用LPUSH/RPUSH命令向列表添加值时,输出提供当前项目数。然后,您可以使用以下LRANGE命令获取整个列表,以0作为开始并-1表示最后一个索引项。

使用LINDEX命令从链接列表中检索特定值或使用命令删除项目LPOP/RPOP

向链表添加值是一种有效的操作,无论其大小如何都不会影响写入速度。但是,从链表中读取数据可能取决于键值对值侧的字符串数量。

用例:链表提供的可能性使其成为存储实时数据更新例,如社交媒体帖子或日志的理想数据类型。

哈希值

Redis 哈希存储键值对的无序映射。散列键与值相关联。该值是一个包含其他键值对的 Redis 字符串。您不能使用其他复杂的数据结构,例如 Sets、Lists 或其他 Hashes 作为值。

基本哈希命令允许您独立访问和更改单个或多个字段。

  • HSET – 将值映射到散列中的键。
  • HGET – 检索与散列中的键关联的单个值。
  • HGETALL – 显示整个哈希内容。
  • HDEL – 从散列中删除现有的键值对。

每次使用HSET命令将项目添加到散列时,返回值会(integer) n通知您条目是否已存在以及实例数。使用该HDEL命令时会提供相同的信息。

用例:哈希可以非常有效地存储数百万甚至数十亿个对象。可用字段的数量使得哈希对于维护大量单个对象,例如用户数据非常有用。

集合

Redis 集是唯一字符串的无序集合。由于集合没有排序,您不能像列表一样从索引的前端或末尾删除项目。但是,字符串是唯一的,并且同一项目的多个实例不可能出现在一个集合中。

使用以下命令添加、删除、检索和检查集合中的单个项目:

  • SADD – 将一个或多个项目添加到一个集合中。
  • SISMEMBER – 找出一个项目是否是一个集合的一部分。
  • SMEMBERS – 从集合中检索所有项目。
  • SREM – 从集合中删除现有项目。

将同一项目多次添加到一个集合中总是会产生一个副本。因此,您不需要使用SMEMBERSorSISMEMBER命令来确定项目是否已经是集合的成员。

使用该SADD命令确保集合中没有重复的条目。

用例: Redis 集非常适合跟踪独一无二的事件,例如独特的页面浏览量或单个 IP。集合还支持高级操作,例如并集、交集和差操作。

排序集合

排序集或ZSET是 Redis 中最高级的数据类型之一。

排序集键值对的值部分由称为成员的唯一字符串元素(键)和称为分数的项目(值)组成。排序集将每个元素映射到一个浮点值 ( score ) 并使用该值以特定顺序对元素进行排序。

您可以按成员、排序顺序和分数值访问排序集中的项目。基本命令允许您根据成员值和分数范围获取、添加、删除单个值或检索项目。

  • ZADD – 将具有分数的成员添加到排序集中。
  • ZRANGE – 根据项目在排序顺序中的位置检索项目。该withscores 选项产生实际的分数值。
  • ZRANGEBYSCORE– 根据定义的分数范围从排序集中获取项目。该withscores 选项产生实际的分数值。
  • ZREM从排序集中删除项目。

只有成员分数对的成员值被视为唯一的。如果您将两个不同的分数与同一个成员值相关联,则排序集中只会出现最新添加的分数。如果两个不同的成员具有相同的分数, Redis 会按字母数字顺序对值进行排序。

用例:单个排序集可以使用ZRANGEZREVRANGERedis 命令跟踪并提供在线比赛中玩家分数的有序排行榜。

基数统计

HyperLogLogs 提供集合中唯一项目的估计计数。与其他解决方案相反,HyperLogLogs 中的项目不会被单独计算,因为这需要跟踪之前的项目以避免对相同元素进行两次计数。此类操作需要的内存量等于用于存储数据的内存量。

HyperLogLog 结构使用更有效的概率算法来估计集合的大小,而不是计算每个项目。估计的错误率低于 1%。

HyperLogLog 命令允许您添加项目、检索唯一项目的估计计数以及创建多个 HyperLogLog 的联合。

  • PFADD – 向 HyperLogLog 添加一个或多个元素。
  • PFCOUNT – 从单个 HyperLogLog 中获取估计的唯一项目数。
  • PFMERGE – 将不同的 HyperLogLog 合并为一个 HyperLogLog。

结果的准确性可能因集合的大小而异。但是,如果您不需要精确的项目计数,则此概率结构允许您仅使用原本需要的内存的一小部分。

用例:使用 HyperLogLogs 来聚合和计算唯一的用户交互或查询。

位图

Redis 字符串是一个二进制序列,最大大小为 512 兆字节。位图允许您使用适当的命令在位级别上操作字符串。

  • SETBIT – 基于 0 或 1 值定义或清除该位。
  • GETBIT – 检索由键指定的字符串值的位值。
  • BITOP – 在字符串之间执行按位运算。
  • BITPOS – 找到字符串中设置为 1 或 0 的第一位。
  • BITCOUNT – 计算字符串中设置为 1 的位数。

能够操作字符串的位提供了特殊的节省空间的机会。它还提供了一种直接访问和处理数据基本元素的方法。

用例:对位进行操作简化了实时分析、人口计数器和跟踪用户活动。位图经常用于存储可以表示为连续键之间的布尔值是/否分隔的数据。

全面了解 Redis 数据类型以及与每个数据结构相关的基本命令。为在应用程序中设计合适的存储解决方案提供了灵活性。

喜欢的朋友记得给关注~

相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...