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 类似于消息队列,支持多消费者组 日志收集、事件驱动
相关推荐
YouQian7727 分钟前
label 拓扑排序
数据结构·算法
歌者長門9 分钟前
做题笔记:某大讯飞真题28道
java·数据结构·算法
weixin_4196583123 分钟前
MySQL的JDBC编程
数据库·mysql
JavaLearnerZGQ34 分钟前
Docker部署Nacos
数据库·docker·容器
boyedu1 小时前
哈希指针与数据结构:构建可信数字世界的基石
数据结构·算法·区块链·哈希算法·加密货币
何传令1 小时前
SQL排查、分析海量数据以及锁机制
数据库·sql·mysql
msg_data1 小时前
windows环境下MySQL 8.0 修改或重置密码
数据库·mysql
新时代苦力工3 小时前
桶排序-Java实现
数据结构·算法·排序算法
踏过山河,踏过海3 小时前
Django自带的加密算法
数据库·django·sqlite