Redis 作为一款高性能的开源内存数据库,凭借其丰富多样的数据结构和出色的性能,在缓存、会话存储、实时分析等众多场景中得到了广泛应用。下面将详细介绍 Redis 主要的数据结构,包括它们的类型、具体用法和适用场景。

1、字符串(String)

字符串是 Redis 中最基础也最常用的数据结构,它可以存储字符串、整数和浮点数等多种类型的数据,最大能存储 512MB 的数据。

具体用法

字符串的常用命令丰富多样。SET key value命令用于设置指定键的值,例如SET username "zhangsan",就将键 “username” 的值设置为 “zhangsan”。GET key则用于获取指定键的值,执行GET username会返回 “zhangsan”。INCR key可对存储整数的键进行自增操作,若键 “count” 的值为 5,执行INCR count后,其值变为 6。DECR key用于自减操作,INCRBY key increment能按指定增量增加,DECRBY key decrement可按指定减量减少。APPEND key value可以向字符串末尾追加内容,比如对键 “message” 的值 “Hello” 执行APPEND message " World",其值就变为 “Hello World”。

使用场景

在缓存场景中,字符串可用于存储用户信息、商品详情等,减轻数据库压力。例如将商品的基本信息缓存起来,当用户查询时直接从 Redis 获取,提高响应速度。在计数器方面,像网站的访问量统计、视频的播放次数统计等,都可以通过INCR等命令轻松实现。此外,还可用于存储会话信息,如用户登录后的会话 ID 对应的用户数据。

2、哈希(Hash)

哈希数据结构类似于 Java 中的 HashMap,适合存储对象类型的数据,它由字段和对应的字段值组成,每个哈希可以存储多达 2^32 - 1 个键值对。

具体用法

HSET key field value用于为哈希表中的字段设置值,例如HSET user:1 name "zhangsan" age 25,就为键 “user:1” 的哈希表设置了 “name” 字段值为 “zhangsan”,“age” 字段值为 25。HGET key field获取指定哈希表中字段的值,HGET user:1 name会返回 “zhangsan”。HGETALL key能获取哈希表中所有的字段和值,执行后会返回 “name”“zhangsan”“age”“25” 等内容。HDEL key field用于删除哈希表中的指定字段,HEXISTS key field可判断字段是否存在,HKEYS key返回哈希表中所有字段,HVALS key返回所有字段值。

使用场景

哈希非常适合存储对象数据,如用户信息包含姓名、年龄、地址等多个属性,商品信息包含名称、价格、库存等,使用哈希存储可以方便地对单个属性进行操作,而无需修改整个对象。例如更新用户的年龄,只需使用HSET user:1 age 26即可,操作高效且灵活。

3、列表(List)

Redis 的列表是一种有序的字符串集合,它允许在头部和尾部进行元素的插入和删除操作,列表中的元素可以重复,最多能存储 2^32 - 1 个元素。

具体用法

LPUSH key value1 value2 ...用于向列表头部添加一个或多个元素,LPUSH fruits "apple" "banana"会在列表 “fruits” 头部依次添加 “apple” 和 “banana”,此时列表为 ["banana", "apple"]。RPUSH key value1 value2 ...则向列表尾部添加元素。LPOP key移除并返回列表头部的元素,RPOP key移除并返回列表尾部的元素。LRANGE key start stop用于获取列表中指定范围的元素,LRANGE fruits 0 1会返回列表 “fruits” 中从索引 0 到 1 的元素。LLEN key获取列表的长度,LREM key count value删除列表中指定数量的指定值元素。

使用场景

消息队列是列表的典型应用场景之一,通过LPUSH向队列中添加消息,RPOP从队列中取出消息,实现简单的消息传递。在排行榜方面,可以存储用户的积分等数据,结合LRANGE命令获取排名靠前的用户。此外,还可用于存储用户的最近浏览记录,通过LPUSH不断添加新记录,并用LTRIM命令限制列表长度,只保留最近的几条记录。

4、集合(Set)

集合是一个无序的字符串集合,集合中的元素具有唯一性,不能重复,最多可存储 2^32 - 1 个元素。

具体用法

SADD key member1 member2 ...用于向集合中添加一个或多个元素,SADD tags "java" "python" "redis"就向集合 “tags” 中添加了 “java”“python”“redis” 三个元素。SMEMBERS key返回集合中的所有元素。SISMEMBER key member判断元素是否在集合中,SISMEMBER tags "java"会返回 1,表示存在。SREM key member1 member2 ...删除集合中的指定元素,SCARD key获取集合的元素个数。集合还支持交集、并集、差集操作,SINTER key1 key2返回两个集合的交集,SUNION key1 key2返回并集,SDIFF key1 key2返回差集。

使用场景

集合适合用于存储需要去重的数据,如用户的兴趣标签,确保每个标签只出现一次。在社交场景中,可用于存储用户的好友列表,通过交集操作可以轻松找到两个用户的共同好友,例如SINTER user:1:friends user:2:friends就能得到用户 1 和用户 2 的共同好友。此外,还可用于实现抽奖功能,通过SRANDMEMBER key count随机获取集合中的元素作为中奖用户。

5、有序集合(Sorted Set)

有序集合与集合类似,元素具有唯一性,但它为每个元素关联了一个分数(score),并通过分数对元素进行排序,最多可存储 2^32 - 1 个元素。

具体用法

ZADD key score1 member1 score2 member2 ...用于向有序集合中添加一个或多个元素及其分数,ZADD ranking 90 "zhangsan" 85 "lisi"向有序集合 “ranking” 中添加了 “zhangsan”(分数 90)和 “lisi”(分数 85)。ZRANGE key start stop [WITHSCORES]按照分数从小到大的顺序返回指定范围的元素,加上WITHSCORES会同时返回分数,ZRANGE ranking 0 1 WITHSCORES会返回 “lisi” 85、“zhangsan” 90。ZREVRANGE key start stop [WITHSCORES]则按照分数从大到小的顺序返回元素。ZSCORE key member获取指定元素的分数,ZINCRBY key increment member为元素的分数增加指定值,ZREM key member1 member2 ...删除有序集合中的指定元素。

使用场景

有序集合在排行榜场景中应用广泛,如游戏中的玩家积分排行榜、电商平台的商品销量排行榜等,通过ZRANGE或ZREVRANGE可以快速获取排名靠前或靠后的用户或商品。在延迟任务方面,可将任务的执行时间作为分数,通过ZRANGEBYSCORE命令获取到了执行时间的任务进行处理。此外,还可用于实现范围查询,例如查询分数在某个区间内的元素。

6、Bitmap(位图)

Bitmap 是一种特殊的字符串,它通过位来存储数据,每个位只能是 0 或 1,适合进行位级别的操作,能高效地利用存储空间。

具体用法

SETBIT key offset value用于设置指定偏移量的位的值,SETBIT user:login:20231001 5 1表示用户 ID 为 5 的用户在 2023 年 10 月 1 日登录过(将偏移量 5 的位设置为 1)。GETBIT key offset获取指定偏移量的位的值,GETBIT user:login:20231001 5会返回 1。BITCOUNT key [start end]统计指定范围内值为 1 的位的数量,BITCOUNT user:login:20231001可统计该日的登录用户数。BITOP operation destkey key1 key2 ...对多个 Bitmap 执行位运算(AND、OR、XOR 等),例如BITOP AND user:login:both user:login:20231001 user:login:20231002可得到两天都登录的用户。

使用场景

Bitmap 非常适合用于存储布尔型数据,如用户的登录状态(每天一个 Bitmap,位的偏移量代表用户 ID,值为 1 表示登录),通过BITCOUNT可以快速统计每天的登录人数,通过位运算可以统计连续多天登录的用户等。此外,还可用于实现用户标签的存储,每个标签对应一个 Bitmap,通过位运算可以快速筛选出具有特定组合标签的用户。

7、HyperLogLog

HyperLogLog 是一种用于基数统计的数据结构,它能够以极小的空间代价估算出一个集合中不同元素的数量(基数),误差率较低,通常在 1% 左右。

具体用法

PFADD key element1 element2 ...向 HyperLogLog 中添加元素,PFADD unique:visitors "user1" "user2" "user3"向 “unique:visitors” 中添加了三个用户。PFCOUNT key用于获取 HyperLogLog 估算的基数,PFCOUNT unique:visitors会返回 3(估算值)。PFMERGE destkey sourcekey1 sourcekey2 ...将多个 HyperLogLog 合并到一个新的 HyperLogLog 中,PFMERGE unique:visitors:week unique:visitors:day1 unique:visitors:day2 ...可得到一周的独立访客估算数。

使用场景

HyperLogLog 主要用于独立用户数统计、页面 UV(独立访客)统计等场景。例如统计一个网站每天的独立访客数,无需存储每个访客的信息,只需通过PFADD添加访客标识,PFCOUNT获取估算的独立访客数,大大节省了存储空间,尤其适合数据量大的场景。

8、Geospatial(地理空间)

Geospatial 是 Redis 用于存储和操作地理空间数据的数据结构,它可以存储经纬度信息,并支持距离计算、范围查询等操作。

具体用法

GEOADD key longitude latitude member ...用于向地理空间集合中添加地理位置,GEOADD cities 116.403874 39.914885 "beijing" 121.473701 31.230416 "shanghai"向 “cities” 中添加了北京和上海的经纬度信息。GEODIST key member1 member2 [unit]计算两个地理位置之间的距离,GEODIST cities beijing shanghai km会返回北京到上海的大致距离(单位为千米)。GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]根据指定的经纬度和半径,查询该范围内的地理位置,例如GEORADIUS cities 116.403874 39.914885 100 km可查询北京周边 100 千米内的城市。

使用场景

Geospatial 在 LBS(基于位置的服务)场景中发挥着重要作用,如外卖平台的附近商家查询、打车软件的附近司机查找等。通过GEORADIUS命令可以快速筛选出指定范围内的地理位置,结合距离信息为用户提供相关服务。

综上所述,Redis 的每种数据结构都有其独特的特点和适用场景,在实际开发中,应根据具体的业务需求选择合适的数据结构,以充分发挥 Redis 的高性能优势。

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

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

相关文章

HAMR硬盘高温写入的可靠性问题

热辅助磁记录(HAMR)作为突破传统磁记录密度极限的下一代存储技术,其在数据中心大规模应用的核心挑战在于可靠性保障。 扩展阅读: 下一个存储战场:HAMR技术HDD HAMR技术进入云存储市场! 漫谈HAMR硬盘的可靠性 随着存储密度向4Tbpsi迈进,传统磁记录技术遭遇"三难困境…

使用llama-factory进行qwen3模型微调

运行环境 Linux 系统(ubuntu) Gpu (NVIDIA) 安装部署 llama factory CUDA 安装 首先,在 https://developer.nvidia.com/cuda-gpus 查看您的 GPU 是否支持CUDA 保证当前 Linux 版本支持CUDA. 在命令行中输入 uname -m && cat /etc/*release,应当看到类似的输出 x8…

tcp/udp调试工具

几款tcp/udp调试工具 下载地址:夸克网盘

智慧光伏发电信息化系统需求文档

以下是从产品经理角度撰写的智慧光伏发电信息化系统需求文档,聚焦光伏行业痛点与业务价值,遵循标准PRD结构:智慧光伏发电信息化系统需求文档 版本:1.0 日期:2025年7月19日 作者:产品经理视角一、文档概述 1…

ARCS系统机器视觉实战(直播回放)

ARCS系统机器视觉实战本次培训主要围绕ARCS操作系统中的视觉与机器人同步应用展开,详细讲解了网络配置、视觉软件设置、九点标定、机器人程序编写以及数据通信等内容。以下是关键要点提炼: 网络配置 为机器人、相机和电脑分别设置静态IP地址,…

Http请求中的特殊字符

问题 一个 springboot 应用&#xff0c;包含如下 controller RestController public class DemoController {GetMapping("/get")public ResponseEntity<String> get(RequestParam(value "cid2") String cid2) 准备测试数据 String cid2 "…

告别手动报表开发!描述数据维度,AI 自动生成 SQL 查询 + Java 导出接口

Java 开发中&#xff0c;报表模块往往是 “隐形耗时大户”—— 产品经理要 “按地区、月份统计订单量”&#xff0c;开发者需先编写 SQL 查询&#xff0c;再手动开发导出接口&#xff0c;稍作调整又要重新调试&#xff0c;耗费大量时间在重复劳动上。飞算 JavaAI 通过 “数据维…

函数设计测试用例

//归并排序:public static void mergeSort(int[] a,int left,int right){if(left > right)return;int mid left(right -left)/2;mergeSort(a,left,mid);mergeSort(a,mid1,right);int[] tmp new int[a.length];int l left,r mid1,k left;while(l<mid && r<…

Vmware虚拟机使用仅主机模式共享物理网卡访问互联网

一、概述 Vmware虚拟机网卡模式有三种&#xff1a;桥接模式、仅主机模式、NAT模式。默认情况下&#xff0c;Vmware虚拟机使用仅主机模式不能访问互联网。因此&#xff0c;虚拟机可以共享宿主机的物理网卡访问互联网。 三种网卡模式的区别二、Vmware网络设置 2.1、调整虚拟网络 …

声画同步!5 个音视频素材适配的网站,创作更和谐

视频画面和背景音乐不搭&#xff1f;音效和动作不同步&#xff1f;好的作品&#xff0c;声音和画面必须像齿轮一样咬合。这 5 个专注 “声画同步” 的素材网站&#xff0c;能让音视频素材精准匹配&#xff0c;从旋律到节奏&#xff0c;从音效到画面&#xff0c;都默契十足&…

13.多种I/O函数

前言 之前的示例中&#xff0c;基于Linux的使用read&write函数完成数据I/O&#xff0c;基于Windows的则使用send&recv函数。这次的Linux示例也将使用send& recv函数&#xff0c;并讲解其与read&write函数相比的优点。还将介绍几种其他的I/O函数。 一、send &am…

设计模式五:桥模式(Bridge Pattern)

桥模式是一种结构型设计模式&#xff0c;它将抽象部分与其实现部分分离&#xff0c;使它们可以独立变化。这种模式通过提供桥梁结构将抽象和实现解耦。桥模式的结构桥模式包含以下主要角色&#xff1a;Abstraction&#xff08;抽象类&#xff09;&#xff1a;定义抽象接口&…

深入理解设计模式之模板模式:优雅地定义算法骨架

在软件开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;多个类执行相似的操作流程&#xff0c;但每个类在流程的某些步骤上有自己特定的实现。如果为每个类都完整地编写整个流程&#xff0c;会导致大量重复代码&#xff0c;且难以维护。这时候&#xff0c;模板模式&…

基于单片机宠物喂食器/智能宠物窝/智能饲养

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 深夜加班时&#xff0c;你是否担心家中宠物饿肚子&#xff1f;出差旅途中&#xff0c;是否焦虑宠…

静态补丁脚本 - 修改 libtolua.so

直接改arm64的so&#xff0c; 使用python脚本。#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 静态补丁脚本 - 修改 libtolua.so 主要功能&#xff1a; 1. 修改 luaL_loadbuffer 函数&#xff0c;将跳转目标从 luaL_loadbufferx 改为 luaL_loadfilex 2. …

2-大语言模型—理论基础:详解Transformer架构的实现(2)

目录 1-大语言模型—理论基础&#xff1a;详解Transformer架构的实现(1)-CSDN博客https://blog.csdn.net/wh1236666/article/details/149443139?spm1001.2014.3001.5502 2.3、残差连接和层归一化 2.3.1、什么是层归一化&#xff1f; 2.3.2、层归一化的核心特点&#xff08…

SmartX 用户建云实践|富士康:基于榫卯企业云平台构建分布式云,支撑全球多地工厂重要产线

作为全球最大的电子科技智造服务商&#xff0c;富士康集团在全球范围内构建生产制造网络。为实现多厂区统一管理与降本增效&#xff0c;在逐步替代 VMware 虚拟化架构的过程中&#xff0c;富士康对比了自研 OpenStack Ceph 平台和 SmartX 超融合方案&#xff0c;最终选择基于 …

ADC选型设计

1、最大摆伏FSR&#xff1a; 0 ~ 4.096V&#xff0c;一般Vref要等于FSR 2、最大频率&#xff1a;根据奈奎斯特采样定理大于2倍的信号频率才够还原信号&#xff0c;所以选择20/50倍更好&#xff0c; 3、最小精度&#xff0c;对于一给定模拟输入&#xff0c;实际数字输出与理论预…

基于深度学习的火灾智能检测系统设计与实现

在各类安全事故中&#xff0c;火灾因其突发性强、破坏力大&#xff0c;一直是威胁人们生命财产安全的重大隐患。传统的火灾检测方式多依赖烟雾传感器、温度传感器等&#xff0c;存在响应滞后、易受环境干扰等问题。随着深度学习技术的飞速发展&#xff0c;基于计算机视觉的火灾…

HIVE实战处理(二十四)留存用户数

留存概念: 次X日活跃留存&#xff0c;次X日新增留存&#xff0c;也就是看今天的新增或活跃用户在后续几天的留存情况一、留存表的生成逻辑 因为用户活跃日期和留存的日期无法对齐所以搞了2级分区&#xff08;dt,static_day&#xff09; 1&#xff09;首先获得计算日D、根据要出…