redis 支持哪几种数据结构

Redis 支持多种数据结构,每种数据结构都有其特定的用途和优势。以下是 Redis 支持的主要数据结构及其特点,并附上代码示例:


1. String(字符串)

  • 特点

    • 最基本的数据类型,可以存储字符串、整数或浮点数。

    • 最大支持 512MB 的数据。

  • 常用命令

    • SET:设置值。

    • GET:获取值。

    • INCR:将值加 1(适用于整数)。

  • 代码示例

    bash

    复制代码
    SET mykey "Hello"
    GET mykey  # 输出 "Hello"
    INCR counter  # 将 counter 的值加 1

2. Hash(哈希)

  • 特点

    • 类似于字典或对象,适合存储键值对。

    • 适合存储对象的字段和值。

  • 常用命令

    • HSET:设置字段值。

    • HGET:获取字段值。

    • HGETALL:获取所有字段和值。

  • 代码示例

    bash

    复制代码
    HSET user:1000 name "Alice" age 30
    HGET user:1000 name  # 输出 "Alice"
    HGETALL user:1000  # 输出所有字段和值

3. List(列表)

  • 特点

    • 有序的字符串列表,支持从两端插入或删除元素。

    • 适合实现队列、栈等数据结构。

  • 常用命令

    • LPUSH:从左侧插入元素。

    • RPUSH:从右侧插入元素。

    • LPOP:从左侧弹出元素。

    • LRANGE:获取指定范围的元素。

  • 代码示例

    bash

    复制代码
    LPUSH mylist "world"
    LPUSH mylist "hello"
    LRANGE mylist 0 -1  # 输出 ["hello", "world"]
    LPOP mylist  # 输出 "hello"

4. Set(集合)

  • 特点

    • 无序且唯一的字符串集合。

    • 支持交集、并集、差集等操作。

  • 常用命令

    • SADD:添加元素。

    • SMEMBERS:获取所有元素。

    • SINTER:计算多个集合的交集。

  • 代码示例

    bash

    复制代码
    SADD myset "apple"
    SADD myset "banana"
    SMEMBERS myset  # 输出 ["apple", "banana"]
    SADD myset2 "banana"
    SINTER myset myset2  # 输出 ["banana"]

5. Sorted Set(有序集合)

  • 特点

    • 类似于 Set,但每个元素关联一个分数(score),用于排序。

    • 适合实现排行榜、优先级队列等。

  • 常用命令

    • ZADD:添加元素及其分数。

    • ZRANGE:按分数范围获取元素。

    • ZRANK:获取元素的排名。

  • 代码示例

    bash

    复制代码
    ZADD leaderboard 100 "Alice"
    ZADD leaderboard 200 "Bob"
    ZRANGE leaderboard 0 -1 WITHSCORES  # 输出 ["Alice", "100", "Bob", "200"]
    ZRANK leaderboard "Bob"  # 输出 1(排名从 0 开始)

6. HyperLogLog(基数统计)

  • 特点

    • 用于统计唯一元素的数量,占用固定内存(12KB)。

    • 适合统计大规模数据的基数(如 UV 统计)。

  • 常用命令

    • PFADD:添加元素。

    • PFCOUNT:统计基数。

    • PFMERGE:合并多个 HyperLogLog。

  • 代码示例

    bash

    PFADD visitors "user1" "user2" "user3" PFCOUNT visitors # 输出 3 PFADD visitors2 "user3" "user4" PFMERGE all_visitors visitors visitors2 PFCOUNT all_visitors # 输出 4


7. Bitmap(位图)

  • 特点

    • 使用字符串的位操作,适合存储布尔值或标志位。

    • 适合实现签到、用户在线状态等功能。

  • 常用命令

    • SETBIT:设置某一位的值。

    • GETBIT:获取某一位的值。

    • BITCOUNT:统计值为 1 的位数。

  • 代码示例

    bash

    复制代码
    SETBIT mybitmap 1 1
    SETBIT mybitmap 2 1
    GETBIT mybitmap 1  # 输出 1
    BITCOUNT mybitmap  # 输出 2

8. Geospatial(地理空间)

  • 特点

    • 存储地理位置(经纬度),支持计算距离、范围查询等。

    • 适合实现附近的人、地点搜索等功能。

  • 常用命令

    • GEOADD:添加地理位置。

    • GEODIST:计算两个位置的距离。

    • GEORADIUS:查询指定范围内的位置。

  • 代码示例

    bash

    复制代码
    GEOADD cities 116.397128 39.916527 "Beijing"
    GEOADD cities 121.473701 31.230416 "Shanghai"
    GEODIST cities Beijing Shanghai km  # 输出两地距离(单位:公里)
    GEORADIUS cities 116 39 1000 km  # 查询北京 1000 公里范围内的城市

9. Stream(流)

  • 特点

    • 类似于消息队列,支持多消费者组。

    • 适合实现日志收集、事件驱动等场景。

  • 常用命令

    • XADD:添加消息。

    • XREAD:读取消息。

    • XGROUP:创建消费者组。

  • 代码示例

    bash

    复制代码
    XADD mystream * name "Alice" age 30
    XREAD COUNT 1 STREAMS mystream 0
    XGROUP CREATE mystream mygroup 0

10. 总结

数据结构 特点 适用场景
String 存储字符串、整数或浮点数 缓存、计数器
Hash 存储键值对 对象存储
List 有序列表,支持两端操作 队列、栈
Set 无序且唯一的集合 标签、去重
Sorted Set 有序集合,支持按分数排序 排行榜、优先级队列
HyperLogLog 基数统计,占用固定内存 UV 统计
Bitmap 位操作,适合布尔值或标志位 签到、用户在线状态
Geospatial 存储地理位置,支持距离计算和范围查询 附近的人、地点搜索
Stream 类似于消息队列,支持多消费者组 日志收集、事件驱动
相关推荐
某不知名網友28 分钟前
MySQL数据表详解|创建、查看、修改、删除实战教程
数据库·mysql
Wang's Blog32 分钟前
PostgreSQL笔记20: 实例、集群、模板数据库与表空间 —— 逻辑体系架构深度解析
数据库·笔记·postgresql
2602_9599609237 分钟前
大厂Java面试:Spring Boot、JVM、Redis、Kafka与Elasticsearch在内容社区UGC场景下的实战拷问
java·jvm·spring boot·redis·面试题
wuyk5558 小时前
4.树:一对多的层次数据结构
开发语言·数据结构·stm32·单片机
杨运交9 小时前
[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比
数据库·redis·分布式
FungLeo9 小时前
Node 后端实战 · 列表查询到底怎么写?一个通用 DSL 封装,过滤分页排序一次搞定
数据库·node.js·serverless·dsl 封装·通用列表查询
何以解忧,唯有..9 小时前
深入理解与应对:Redis 缓存雪崩、击穿、穿透三大经典问题
redis·缓存·mybatis
抓蛙师9 小时前
多租户 tenant_id SQL 注入漏洞分析与应急响应报告
数据库·sql
ACP广源盛139246256739 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 MoE 私有化部署下 GSV2221 视频转换芯片机遇分析
大数据·数据库·人工智能
七牛开发者10 小时前
为什么 Go 很适合 AI 辅助开发?
数据库·人工智能·python·elasticsearch·log4j