Redis数据类型详解

Redis数据类型详解

Redis 数据类型详解:

Redis 是一款高级的键值存储系统,除了基础的键值存储功能外,还提供了丰富的数据结构支持,以下是 Redis 支持的五种主要数据类型及其详细说明:

Redis数据类型

1. String(字符串)

  • 特点
    • 字符串是最基本的数据类型,每个键对应一个值。
    • 值可以是字符串、整数、浮点数或者其他二进制数据,最大容量为 512 MB。
    • 支持原子性的自增(INCRINCRBY)、自减(DECRDECRBY)等操作。

2. List(列表)

  • 特点
    • 列表是有序的字符串元素集合,采用双端链表(Double Linked List)实现,也可以通过压缩列表(ZipList)或快速列表(QuickList,自 Redis 3.2 版本起引入)进行存储优化。
    • 支持两端插入(LPUSH/RPUSH)、弹出(LPOP/RPOP)、索引访问(LINDEX)、范围查询(LRANGE)等操作。

3. Set(集合)

  • 特点
    • 集合是一组不重复的字符串元素集合,无序存储。
    • 支持添加(SADD)、删除(SREM)、成员测试(SISMEMBER)、交集、并集、差集运算(如SINTERUNIONSDIFF)等。

4. Hash(哈希)

  • 特点
    • 哈希类似于关系数据库中的表结构,由 field-value 键值对组成,每个键下可关联多个字段(field)及其对应的值。
    • 支持添加、删除、查找哈希中的字段值(如HSETHGETHDEL),以及批量操作和哈希之间的合并操作。

5. Sorted Set(有序集合)

  • 特点
    • 类似于集合,有序集合中的每个元素也是字符串,但每个元素还会关联一个分数(score),用于排序。
    • 有序集合是根据 score 进行升序排列的。
    • 支持添加成员(ZADD)、删除成员(ZREM)、按分数范围查询(ZRANGEBYSCORE)、获取排名(ZRANK/ZREVRANK)等操作。

此外,Redis 在内部实现上,对于不同数据类型采用了多种高效的数据结构,例如 SDS (简单动态字符串)、LinkedList、Dict(哈希表)、Intset(整数集合)、SkipList(跳跃表)、ZipList(压缩列表)和 ListPack(从 Redis 7.0 开始取代 ZipList 的新格式)等,以适应不同类型数据的不同场景需求。

使用场景以及操作示例

当然,以下是Redis五种主要数据类型的使用场景及其操作示例:

1. String(字符串)

使用场景

  • 缓存:存储用户信息、页面内容等静态资源。
  • 计数器:例如记录网页访问次数、点赞数、商品库存等。
  • 会话管理:存储用户的SessionID或其他会话数据。

操作示例

# 设置键值对
SET user:1000 name "liwei"
SET counter likes 100

# 获取键对应的值
GET user:1000:name
GET counter:likes

# 自增操作
INCR counter:likes

2. List(列表)

使用场景

  • 消息队列:生产者消费者模型,RPOP + LPUSH 或 BRPOP + RPUSH 构成可靠的消息队列。
  • 发布/订阅系统:存放待发送的消息列表。
  • 用户的行为历史记录:例如用户的购物车或浏览历史。

操作示例

# 在列表头部添加元素
LPUSH shoppingCart item1

# 在列表尾部添加元素
RPUSH shoppingCart item2

# 获取列表指定范围内的元素
LRANGE shoppingCart 0 -1

# 从列表头部弹出元素
LPOP shoppingCart

3. Set(集合)

使用场景

  • 关系处理:如共同关注、标签系统、去重等。
  • 推荐好友系统:存储用户的共同好友列表。

操作示例

# 添加元素到集合
SADD followers:1000 follower1 follower2

# 检查成员是否存在于集合中
SISMEMBER followers:1000 follower3

# 集合间的交并差运算
SINTER followers:1000 followers:2000
SUNION followers:1000 followers:2000
SDIFF followers:1000 followers:2000

4. Hash(哈希)

image.png

使用场景

  • 存储对象属性:如用户信息、产品详情等复杂结构数据。
  • 更新部分属性而无需全部加载整个对象。

操作示例

# 向哈希中添加键值对
HSET user:1000 username "liwei"
HSET user:1000 email "l_wstv@aliyun.com"

# 获取哈希中单个或多个字段的值
HGET user:1000 username
HMGET user:1000 username email

# 更新哈希中字段的值
HSET user:1000 email "www.hanyuanhun.com"

5. Sorted Set(有序集合)

使用场景

  • 排行榜:如按照得分排序的游戏排行榜。
  • 时间轴事件:记录带有时间戳的事件并按时间排序。

操作示例

# 向有序集合添加成员及其分数
ZADD leaderboard 100 player1
ZADD leaderboard 200 player2

# 获取有序集合的指定范围
ZRANGE leaderboard 0 -1
ZRANGE leaderboard 0 -1 WITHSCORES

# 按照分数区间获取成员
ZRANGEBYSCORE leaderboard 150 250

# 更新成员分数
ZINCRBY leaderboard 10 player1

以上示例均展示了如何在Redis CLI中执行相关命令,而在实际编程中,您将通过相应的客户端API调用这些命令。

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

posted @   汉源魂  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示