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 类似于消息队列,支持多消费者组 日志收集、事件驱动
相关推荐
究极无敌暴龙战神X2 小时前
hot100-子串-JS
javascript·数据结构·算法
UFIT4 小时前
数据库操作
数据库·sql·oracle
小杜-coding6 小时前
黑马点评day04(分布式锁-setnx)
java·spring boot·redis·分布式·spring·java-ee·mybatis
xin-cyy6 小时前
MySQL的索引和事务
数据库·mysql
消失在人海中7 小时前
把Excel数据文件导入到Oracle数据库
数据库·oracle·excel
Kookoos8 小时前
ABP vNext + EF Core 实战性能调优指南
数据库·后端·c#·.net·.netcore
zxctsclrjjjcph8 小时前
【高并发内存池】从零到一的项目之centralcache整体结构设计及核心实现
开发语言·数据结构·c++·链表
LLLLLindream8 小时前
Redis-商品缓存
数据库·redis·缓存
柃歌8 小时前
【LeetCode Solutions】LeetCode 176 ~ 180 题解
数据结构·数据库·sql·算法·leetcode
天上掉下来个程小白8 小时前
缓存套餐-01.Spring Cache介绍和常用注解
java·redis·spring·缓存·spring cache·苍穹外卖