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

Redis 数据类型和命令大全

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

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 数据类型以及与每个数据结构相关的基本命令。为在应用程序中设计合适的存储解决方案提供了灵活性。

喜欢的朋友记得给关注~

相关推荐

一篇文章带你了解PHP的学习使用(php的教程)

ThinkPHP5实战...

在memcached管理php的session(memcached libevent)

PHP的session(会话管理)一般是以文件形式进行,而在多个Web服务器之间进行session管理时memecached会比文件管理方式更加方便。在这里介绍如何使用memcached管理PHP的s...

php传值和传引用的区别(php 传值和传引用)

php传值:在函数范围内,改变变量值得大小,都不会影响到函数外边的变量值。PHP传引用:在函数范围内,对值的任何改变,在函数外部也有所体现,因为传引用传的是内存地址。传值:和copy是一样的。【打个比...

PHP 常量详解教程(php常量和变量)

常量类似变量,但是常量一旦被定义就无法更改或撤销定义。PHP常量常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有$符号)。注释:与变量不同,常...

php自学零基础入门小知识(php新手入门教程)

我们就把PHP入门当成一个苹果吧!一口一口的吃掉他!不啰嗦了!开始了1、嵌入方法:类似ASP的<%,PHP可以是<?php或者是<?,结束符号是?>,当然您也可以自己指定。2、...

PHP 语法详解(php语法大全)

PHP脚本在服务器上执行,然后向浏览器发送回纯HTML结果。基础PHP语法PHP脚本可放置于文档中的任何位置。PHP脚本以<?php开头,以?>结尾:<?php...

PHP笔记(一)PHP基础知识(php必背知识点)

创建PHP程序PHP代码框架<?php>2.文件命名规则...

PHP 8新特性之Attributes(注解),你掌握了吗?

PHP8的Alpha版本,过几天就要发布了,其中包含了不少的新特性,当然我自己认为最重要的还是JIT,这个我从2013年开始参与,中间挫折无数,失败无数后,终于要发布的东东。不过,今天呢,我不打算谈J...

PHP基本语法之标记与注释(php注释规范)

1、标记由于PHP是嵌入式脚本语言,它在实际开发中经常会与HTML内容混在一起,所以为了区分HTML与PHP代码,需要使用标记对PHP代码进行标识。如:<html>...

php注解(PHP注解 性能)

目标了解和使用php注解,如果你已经掌握其他一种具有注解的语言,例如:java、python等,你在本文中只需要了解点语法就行。示例php8以前的版本,注解写在注释里,如果你掌握其他语言的注解,你是不...

数据丢失?别慌!MySQL备份恢复攻略

想象一下,某个晴朗的午后,你正享受着咖啡,突然接到紧急电话:你的网站或APP彻底挂了!系统崩溃,界面全白。虽然心头一紧,但你或许还能安慰自己:系统崩溃只是暂停服务,数据还在,修复修复就好了。然而,如果...

MySQL 日志:undo log、redo log、binlog

今天来和大家分享MySQL的三个日志文件,可以说MySQL的多数特性都是围绕日志文件实现,而其中最重要的有以下三种:...

MySQL三大日志:binlog、redolog、undolog全解析

binlog概述在MySQL数据库中,binlog可是个相当重要的存在,它的全称为binarylog,也就是二进制日志。它就像是数据库的“记忆本”,记录了所有的DDL(数据定义语言)和...

1、MySQL数据库介绍(mysql数据库简单介绍)

1.1数据库的核心定义数据库的本质数据库乃存储数据对象之容器,涵盖如下关键组件:表(Table)...

MySQL 日志双雄:实时监控与历史归档实战优化

MySQL日志双雄:实时监控+历史归档实战用这招让你家日志系统再也不卡不爆炸MySQL十亿级日志处理:从洪峰到归档全攻略手把手教你用MySQL搞定ELK级日志监控在微服务架构大行其道的今天,日志系统早...