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

Redis 从入门到精通(二):数据类型详解

系列导读:本篇将深入讲解 Redis 的 8 种数据类型,包括 String、Hash、List、Set、ZSet、Bitmaps、HyperLogLog、Geospatial。


文章目录

    • 一、数据类型概览
      • 1.1 数据类型对比
    • 二、String 字符串
      • 2.1 基本操作
      • 2.2 批量操作
      • 2.3 数值操作
      • 2.4 字符串操作
      • 2.5 应用场景
    • 三、Hash 哈希
      • 3.1 基本操作
      • 3.2 字段操作
      • 3.3 数值操作
      • 3.4 应用场景
    • 四、List 列表
      • 4.1 基本操作
      • 4.2 弹出操作
      • 4.3 索引操作
      • 4.4 修剪操作
      • 4.5 应用场景
    • 五、Set 集合
      • 5.1 基本操作
      • 5.2 集合运算
      • 5.3 随机操作
      • 5.4 应用场景
    • 六、ZSet 有序集合
      • 6.1 基本操作
      • 6.2 范围查询
      • 6.3 删除操作
      • 6.4 应用场景
    • 七、高级数据类型
      • 7.1 Bitmaps 位图
      • 7.2 HyperLogLog 基数统计
      • 7.3 Geospatial 地理位置
    • 总结

一、数据类型概览

1.1 数据类型对比

数据类型说明底层实现典型场景
String字符串、整数、浮点数SDS缓存、计数器
Hash键值对集合ziplist/hashtable存储对象
List有序字符串列表quicklist消息队列
Set无序唯一集合intset/hashtable标签系统
ZSet有序唯一集合skiplist排行榜
Bitmaps位图String签到统计
HyperLogLog基数估算StringUV统计
Geospatial地理位置ZSet附近的人

二、String 字符串

2.1 基本操作

# 设置值SET key value SET user:name"张三"# 获取值GET key GET user:name# "张三"# 设置并返回旧值GETSET key newvalue# 仅当不存在时设置SETNX key value# 存在返回0,不存在返回1# 设置带过期时间SETEX key seconds value SETEX session:token3600"abc123"

2.2 批量操作

# 批量设置MSET key1 value1 key2 value2 MSET user:1:name"张三"user:1:age"25"# 批量获取MGET key1 key2 MGET user:1:name user:1:age# 1) "张三"# 2) "25"

2.3 数值操作

# 递增INCR counter# +1INCRBY counter10# +10# 递减DECR counter# -1DECRBY counter5# -5# 浮点递增INCRBYFLOAT price2.5

2.4 字符串操作

# 获取长度STRLEN key# 追加内容APPEND key"suffix"# 获取子串GETRANGE key start end GETRANGE greeting04# "Hello"# 设置子串SETRANGE key offset value

2.5 应用场景

场景实现方式
缓存SET/GET
计数器INCR/INCRBY
分布式锁SETNX
SessionSETEX

三、Hash 哈希

3.1 基本操作

# 设置单个字段HSET user:1 name"张三"# 设置多个字段HMSET user:1 name"张三"age25city"北京"# 获取单个字段HGET user:1 name# "张三"# 获取多个字段HMGET user:1 name age# 获取所有字段HGETALL user:1# 1) "name"# 2) "张三"# 3) "age"# 4) "25"

3.2 字段操作

# 检查字段是否存在HEXISTS user:1 name# 1存在 0不存在# 删除字段HDEL user:1 city# 获取所有字段名HKEYS user:1# 获取所有字段值HVALS user:1# 获取字段数量HLEN user:1

3.3 数值操作

# 字段递增HINCRBY user:1 age1HINCRBYFLOAT user:1 score0.5

3.4 应用场景

# 存储用户信息HMSET user:1001 name"李四"age30email"li4@example.com"# 购物车HSET cart:user:1001 product:12# 商品ID:数量HSET cart:user:1001 product:21HINCRBY cart:user:1001 product:11# 增加数量

四、List 列表

4.1 基本操作

# 左侧插入LPUSH mylist"a""b""c"# 右侧插入RPUSH mylist"d""e"# 获取列表长度LLEN mylist# 获取范围内元素LRANGE mylist0-1# 获取全部LRANGE mylist02# 获取前3个

4.2 弹出操作

# 左侧弹出LPOP mylist# 右侧弹出RPOP mylist# 阻塞弹出(用于消息队列)BLPOP mylist30# 30秒超时BRPOP mylist30

4.3 索引操作

# 按索引获取LINDEX mylist0# 按索引设置LSET mylist0"newvalue"# 获取长度LLEN mylist

4.4 修剪操作

# 只保留指定范围LTRIM mylist099# 只保留前100个

4.5 应用场景

# 消息队列LPUSH queue:orders"order:1"RPOP queue:orders# 最新列表LPUSH latest:news"news:100"LTRIM latest:news099# 只保留最新100条# 时间线LPUSH timeline:user:1"post:1""post:2"

五、Set 集合

5.1 基本操作

# 添加元素SADD myset"a""b""c"# 获取所有元素SMEMBERS myset# 检查元素是否存在SISMEMBER myset"a"# 1存在 0不存在# 获取元素数量SCARD myset# 删除元素SREM myset"a"

5.2 集合运算

# 交集SINTER set1 set2# 并集SUNION set1 set2# 差集SDIFF set1 set2# 存储运算结果SINTERSTORE result set1 set2 SUNIONSTORE result set1 set2 SDIFFSTORE result set1 set2

5.3 随机操作

# 随机获取元素SRANDMEMBER myset# 随机弹出元素SPOP myset

5.4 应用场景

# 标签系统SADD user:1:tags"科技""互联网""AI"SADD user:2:tags"科技""金融"# 共同好友SINTER user:1:friends user:2:friends# 抽奖系统SADD lottery:users"user1""user2""user3"SPOP lottery:users# 随机抽取

六、ZSet 有序集合

6.1 基本操作

# 添加元素(带分数)ZADD leaderboard100"player1"ZADD leaderboard200"player2"ZADD leaderboard150"player3"# 获取元素分数ZSCORE leaderboard"player1"# 获取元素排名(从0开始)ZRANK leaderboard"player1"# 获取元素数量ZCARD leaderboard

6.2 范围查询

# 按排名范围获取ZRANGE leaderboard09# 前10名ZRANGE leaderboard09WITHSCORES# 带分数# 按分数范围获取ZRANGEBYSCORE leaderboard100200ZRANGEBYSCORE leaderboard100200WITHSCORES# 倒序获取ZREVRANGE leaderboard09WITHSCORES ZREVRANGEBYSCORE leaderboard200100

6.3 删除操作

# 删除元素ZREM leaderboard"player1"# 按排名删除ZREMRANGEBYRANK leaderboard09# 按分数删除ZREMRANGEBYSCORE leaderboard0100

6.4 应用场景

# 排行榜ZADD game:rank1000"player1"ZADD game:rank2000"player2"ZREVRANGE game:rank09WITHSCORES# Top 10# 延时队列ZADD delay:queue1712345678"task1"# 时间戳作为分数# 热搜榜ZINCRBY hot:search1"Redis教程"ZREVRANGE hot:search09WITHSCORES

七、高级数据类型

7.1 Bitmaps 位图

# 设置位SETBIT user:sign:2024:101# 第1天签到SETBIT user:sign:2024:111# 第2天签到# 获取位GETBIT user:sign:2024:10# 统计签到天数BITCOUNT user:sign:2024:1# 查找第一个0或1BITPOS user:sign:2024:10

7.2 HyperLogLog 基数统计

# 添加元素PFADD uv:20240101"user1""user2""user3"# 获取基数(估算值)PFCOUNT uv:20240101# 合并多个HyperLogLogPFMERGE uv:total uv:20240101 uv:20240102

7.3 Geospatial 地理位置

# 添加位置GEOADD locations116.40439.915"北京"GEOADD locations121.47431.230"上海"# 获取位置坐标GEOPOS locations"北京"# 计算两地距离GEODIST locations"北京""上海"km# 查找附近位置GEORADIUS locations116.40439.915100km GEORADIUSBYMEMBER locations"北京"500km

总结

本文我们学习了:

String:字符串、数值操作、应用场景
Hash:对象存储、购物车
List:消息队列、最新列表
Set:标签系统、集合运算
ZSet:排行榜、延时队列
高级类型:Bitmaps、HyperLogLog、Geospatial

下篇预告:Redis 从入门到精通(三):键操作命令详解


作者:刘~浪地球
系列:Redis 从入门到精通(二)
更新时间:2026-04-02

http://www.cnnetsun.cn/news/1658275.html

相关文章:

  • Open UI5 源代码解析之781:LightBox.js
  • 新手友好:通过快马生成的示例代码轻松踏入OpenCode世界
  • 高斯混合模型参数估计 使用EM算法对一维或者高维的高斯混合模型GMM进行密度函数参数估计
  • 3分钟快速获取百度网盘提取码的完整指南
  • 计算机毕业设计springboot在线运营工单处理系统 基于SpringBoot的客户服务工单流转与协同处理平台 SpringBoot框架下的智能运维服务请求跟踪管理系统
  • 3个核心步骤实现Koikatu HF Patch的无缝集成解决方案
  • 保姆级教程:在Windows下用VSCode和STM32CubeProgrammer给Pixhawk4飞控烧写Bootloader
  • Inter字体技术解析与实用指南:解锁现代排版潜能
  • 拯救受损二维码:用QRazyBox实现高效恢复的4个实战策略
  • 从ZJUCTF那道‘简单’的PHP反序列化题,聊聊魔术方法链的实战利用(附完整EXP)
  • 别再只会上传一句话木马了!用DVWA File Upload模块,深入理解PHP文件上传漏洞的5个关键点
  • 新手必看:在快马平台上通过实例代码轻松理解rag核心原理
  • 从BLDC方波到PMSM FOC:如何让你的电机告别“颗粒感”实现丝滑旋转?
  • AI Coding Agent从入门到精通(非常详细),给个文件系统就够了,收藏这篇就够了!
  • 收藏!CRUD时代终结,后端开发者如何转型AI Agent架构师?
  • 保姆级教程:用Dio和GitCode API v5为你的Flutter应用添加用户与仓库搜索功能
  • 探索智能前沿:在快马平台用ai实现openclaw配置的预测与诊断
  • 别让FPGA拖后腿!深入拆解PCIe枚举过程与Xilinx器件配置优化全攻略
  • 2025届毕业生推荐的降AI率网站横评
  • UGUI开发中那些烦人的黄线到底是什么?手把手教你关闭Navigation可视化
  • # 实时数据查询优化实战
  • 【26年最新英语六级真题】2015-2025年12月英语六级历年真题及答案PDF电子版+六级核心词汇
  • OpenClaw 的模型服务是否支持自定义认证插件?
  • Pycharm调试卡在collecting data?3步搞定Gevent兼容模式(附原理详解)
  • javaweb网上零食商城销售系统
  • FPGA新手避坑:用Quartus Prime 23.1的FIFO IP核实现跨时钟域传输(附仿真代码)
  • python-langchain框架(1-8-2 缓存机制——验证缓存的效果)
  • 毕业设计实战:基于YOLOv8与LPRNet的端到端车牌识别系统(Python+PyTorch)
  • 2026届必备的降AI率平台横评
  • 5G NR帧结构与信道:从基础原理到实际应用