当前位置: 首页 > news >正文

Redis基础数据结构

Redis7九大核心数据结构深度解析与操作指南

数据结构全景图

1. String(字符串)

核心命令与操作

# 基础操作
SET user:1 "{\"name\":\"roy\",\"age\":28}"  # 存储对象
GET user:1  # 获取值
MSET config:timeout 30 config:max_conn 100  # 批量存储
MGET config:timeout config:max_conn  # 批量获取# 原子计数
INCR article:1001:views  # 自增1
INCRBY inventory:1001 5  # 增加指定数量
DECR stock:1001  # 自减1# 分布式锁
SETNX lock:order true  # 获取锁(1成功/0失败)
EXPIRE lock:order 10  # 设置过期时间
DEL lock:order  # 释放锁

应用场景

  • 缓存穿透解决方案:空值缓存SET user:-1 "" EX 60
  • 分布式ID生成器:INCR global:id
  • 秒杀库存计数:DECR stock:seckill:1001

2. Hash(哈希表)

常用操作命令

# 对象存储
HSET user:1 name "roy" age 28 balance 1888
HGET user:1 name
HMGET user:1 name age# 购物车实现
HSET cart:1001 10088 1  # 添加商品
HINCRBY cart:1001 10088 1  # 增加数量
HDEL cart:1001 10088  # 删除商品
HGETALL cart:1001  # 获取全量# 字段操作
HEXISTS user:1 email  # 检查字段是否存在
HKEYS user:1  # 获取所有字段名
HVALS user:1  # 获取所有字段值

优缺点分析

✅ 节省内存空间(相比多个String)
✅ 同类数据聚合存储
❌ 不支持field级别过期
❌ 集群环境下慎用大Hash

3. List(列表)

消息队列实现命令

# 基础操作
LPUSH msg:queue "task1" "task2"  # 左侧插入
RPOP msg:queue  # 右侧取出
LRANGE msg:queue 0 -1  # 获取全部元素# 阻塞队列
BLPOP msg:queue 30  # 阻塞式左弹出(30秒超时)
BRPOP msg:queue 0  # 无限阻塞右弹出# 栈结构
LPUSH + LPOP = Stack

应用场景

  • 最新消息列表:LPUSH news:latest <new_id>
  • 消息确认机制:双队列模式
  • 历史记录:固定长度列表LTRIM history:user1 0 49

4. Set(集合)

社交场景命令

# 点赞系统
SADD like:1001 user1 user2  # 添加点赞
SREM like:1001 user1  # 取消点赞
SMEMBERS like:1001  # 获取点赞列表
SCARD like:1001  # 统计点赞数# 关系运算
SINTER follow:1001 follow:1002  # 共同关注
SUNION friend:1001 friend:1002  # 合并好友
SDIFF follow:1001 follow:1002  # 差异关注# 抽奖系统
SADD lottery:0504 user1 user2 user3  # 参与抽奖
SRANDMEMBER lottery:0504 3  # 随机选取3个(不删除)
SPOP lottery:0504 2  # 随机选取并删除2个

5. ZSet(有序集合)

排行榜实现命令

# 基础操作
ZADD rank:game 3000 "player1" 2500 "player2"  # 添加分数
ZINCRBY rank:game 500 "player1"  # 增加分数
ZREVRANGE rank:game 0 9 WITHSCORES  # 获取TOP10# 热搜榜
ZINCRBY hot:202405 1 "华为发布会"  # 热度增加
ZREVRANGE hot:202405 0 4 WITHSCORES  # 前五热搜# 多日数据聚合
ZUNIONSTORE hot:week 7 hot:0501 hot:0502 ... hot:0507
ZREVRANGE hot:week 0 9 WITHSCORES  # 周榜TOP10

6. Bitmap(位图)

签到系统命令

# 每日签到
SETBIT sign:202405:user1 1 1  # 第1天签到
GETBIT sign:202405:user1 1  # 检查是否签到# 统计操作
BITCOUNT sign:202405:user1  # 本月签到总数
BITPOS sign:202405:user1 1  # 首次签到日期# 批量统计
BITOP AND sign:202405:active sign:202405:user1 sign:202405:user2

7. HyperLogLog

UV统计命令

# UV统计
PFADD uv:20240501 user1 user2 user3  # 添加访问记录
PFCOUNT uv:20240501  # 统计独立访客# 多日合并统计
PFMERGE uv:week uv:0501 uv:0502 uv:0503
PFCOUNT uv:week  # 周UV统计

8. Geo(地理空间)

附近商家命令

# 地理位置存储
GEOADD shops 116.404269 39.91582 "王府井店" 121.473701 31.230416 "上海店"# 距离计算
GEODIST shops "王府井店" "上海店" km  # 计算距离# 附近搜索
GEORADIUS shops 116.40 39.91 5 km WITHDIST ASC COUNT 10  # 5km内最近10家
GEOSEARCH shops FROMMEMBER "王府井店" BYRADIUS 3 km  # 王府井店3km范围

9. Stream(流)

消息队列命令

# 生产者
XADD orders * item "手机" price 5999  # 添加消息(*自动生成ID)# 消费者
XREAD COUNT 2 STREAMS orders 0-0  # 读取前2条
XREAD BLOCK 0 STREAMS orders $  # 阻塞监听新消息# 消费组
XGROUP CREATE orders order_group $  # 创建消费组
XREADGROUP GROUP order_group consumer1 COUNT 1 STREAMS orders >  # 消费消息
XACK orders order_group 1640995200000-0  # 消息确认

数据结构选择矩阵

场景推荐结构备选方案
对象缓存HashString(JSON)
排行榜ZSet-
消息队列StreamList
去重统计Set/HyperLogLog-
签到系统BitmapSet
地理位置GeoZSet(GeoHash)

通过合理选择数据结构,可提升性能30%~50%!

http://www.dtcms.com/a/269568.html

相关文章:

  • 深度学习与图像处理 | 基于传统图像处理的自动驾驶车道线检测
  • XSLT注入与安全修复方法
  • 【快手】数据挖掘面试题0002:求某地铁站每日客流量,乘地铁经过、进出站人都包括在内
  • C#随机数生成全面详解:从基础到高级应用
  • 【ROS2 自动驾驶学习】03-ROS2常用命令
  • 网络安全护网实战:攻击手段解析与防御策略
  • 基于odoo17的设计模式详解---工厂模式
  • 阿里云mysql数据丢失,如何通过服务器备份在其他服务器上恢复数据,并获取mysql丢失数据,完成mysql数据恢复
  • Prompt Injection Attack to Tool Selection in LLM Agents
  • 深度剖析:向70岁老系统植入通信芯片——MCP注入构建未来级分布式通信
  • IP 能ping通,服务器是否开机?
  • Go语言反射机制详解
  • 基于ZYNQ7000的AD9226采集卡实现(3、PS LINUX DMA驱动实现)
  • vue3 el-table 行数据沾满格自动换行
  • 【debug】git clone 报错
  • Web前端: :is(通用选择器)
  • 图像轮廓检测与绘制:OpenCV 实战指南
  • claude code-- 基于Claude 4 模型的智能编程工具,重塑你的编程体验
  • 微软上线Deep Research:OpenAI同款智能体,o3+必应双王炸
  • Web后端开发-Mybatis
  • 玩转Docker | 使用Docker部署NotepadMX笔记应用程序
  • UDP的socket编程
  • unity 模型UV重叠问题相关(重新整理)
  • BUUCTF在线评测-练习场-WebCTF习题[GXYCTF2019]BabySQli1-flag获取、解析
  • 无法访问宝塔面板 - 特网科技
  • Coze智能体平台全景解析:从零构建企业级AI应用的实战指南
  • Spring Boot 企业项目技术选型
  • UI前端大数据可视化实战策略:如何设计符合用户认知的数据展示方式?
  • 京东携手HarmonyOS SDK首发家电AR高精摆放功能
  • 开发在线商店:基于Vue2+ElementUI的电商平台前端实践