当前位置:   article > 正文

Redis数据类型详解

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或其他会话数据。

操作示例

  1. # 设置键值对
  2. SET user:1000 name "liwei"
  3. SET counter likes 100
  4. # 获取键对应的值
  5. GET user:1000:name
  6. GET counter:likes
  7. # 自增操作
  8. INCR counter:likes

2. List(列表)

使用场景

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

操作示例

  1. # 在列表头部添加元素
  2. LPUSH shoppingCart item1
  3. # 在列表尾部添加元素
  4. RPUSH shoppingCart item2
  5. # 获取列表指定范围内的元素
  6. LRANGE shoppingCart 0 -1
  7. # 从列表头部弹出元素
  8. LPOP shoppingCart

3. Set(集合)

使用场景

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

操作示例

  1. # 添加元素到集合
  2. SADD followers:1000 follower1 follower2
  3. # 检查成员是否存在于集合中
  4. SISMEMBER followers:1000 follower3
  5. # 集合间的交并差运算
  6. SINTER followers:1000 followers:2000
  7. SUNION followers:1000 followers:2000
  8. SDIFF followers:1000 followers:2000

4. Hash(哈希)

image.png

使用场景

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

操作示例

  1. # 向哈希中添加键值对
  2. HSET user:1000 username "liwei"
  3. HSET user:1000 email "l_wstv@aliyun.com"
  4. # 获取哈希中单个或多个字段的值
  5. HGET user:1000 username
  6. HMGET user:1000 username email
  7. # 更新哈希中字段的值
  8. HSET user:1000 email "www.hanyuanhun.com"

5. Sorted Set(有序集合)

使用场景

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

操作示例

  1. # 向有序集合添加成员及其分数
  2. ZADD leaderboard 100 player1
  3. ZADD leaderboard 200 player2
  4. # 获取有序集合的指定范围
  5. ZRANGE leaderboard 0 -1
  6. ZRANGE leaderboard 0 -1 WITHSCORES
  7. # 按照分数区间获取成员
  8. ZRANGEBYSCORE leaderboard 150 250
  9. # 更新成员分数
  10. ZINCRBY leaderboard 10 player1

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

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号