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 类似于消息队列,支持多消费者组 日志收集、事件驱动
相关推荐
IT 小阿姨(数据库)2 分钟前
PgSQL中pg_stat_user_tables 和 pg_stat_user_objects参数详解
linux·运维·数据库·sql·postgresql·oracle
倔强的石头_12 分钟前
Windows系统下KingbaseES数据库保姆级安装教程(附常见问题解决)
数据库
MChine慕青17 分钟前
顺序表与单链表:核心原理与实战应用
linux·c语言·开发语言·数据结构·c++·算法·链表
麦兜*1 小时前
MongoDB 常见错误解决方案:从连接失败到主从同步问题
java·数据库·spring boot·redis·mongodb·容器
RestCloud1 小时前
PostgreSQL大表同步优化:如何避免网络和内存瓶颈?
前端·数据库·api
阿里云大数据AI技术1 小时前
淘宝闪购基于Flink&Paimon的Lakehouse生产实践:从实时数仓到湖仓一体化的演进之路
数据库·flink
努力学习的小廉1 小时前
深入了解linux系统—— 线程同步
linux·服务器·数据库·算法
数据爬坡ing2 小时前
从挑西瓜到树回归:用生活智慧理解机器学习算法
数据结构·深度学习·算法·决策树·机器学习
格调UI成品2 小时前
DCS+PLC协同优化:基于MQTT的分布式控制系统能效提升案例
数据库·云边协同
失散132 小时前
分布式专题——5 大厂Redis高并发缓存架构实战与性能优化
java·redis·分布式·缓存·架构