redis考核查漏补缺

发布于:2025-04-14 ⋅ 阅读:(23) ⋅ 点赞:(0)

Redis 考核查漏补缺

本文为笔者在学习过程中锁遗漏的部分,非完整的学习记录

一、位图

1.1 什么是位图?

位图是 Redis 中一种高效存储布尔值(0 或 1)的数据结构,通常用于记录状态信息,例如签到系统、用户活跃度统计等。

1.2 核心命令

  • SETBIT key offset value:将位图中指定位置的值设置为 0 或 1。
  • GETBIT key offset:获取位图中指定位置的值。
  • BITCOUNT key:统计位图中值为 1 的位数。

1.3 实际应用

签到系统

  • 每个用户对应一个位图,位图的每个位表示一天的签到状态。
  • 使用 SETBIT user:1 0 1 表示用户 1 在第 0 天签到。
  • 使用 BITCOUNT user:1 统计用户 1 的总签到天数。

用户活跃度统计

  • 每天使用一个位图记录活跃用户,位图的每个位表示一个用户是否活跃。
  • 使用 SETBIT day:20231001 12345 1 表示用户 12345 在 2023 年 10 月 1 日活跃。
  • 使用 BITCOUNT day:20231001 统计当天的活跃用户总数。

二、位域

2.1 什么是位域?

位域是 Redis 中一种高效存储整数值的数据结构,通常用于计数器、资源分配等场景。

2.2 核心命令

  • BITFIELD key:操作位域的核心命令,支持设置、获取和递增位域中的值。
    • SET offset value:将位域中指定位置的值设置为指定值。
    • GET offset:获取位域中指定位置的值。
    • INCRBY offset increment:将位域中指定位置的值递增。

2.3 实际应用

计数器

  • 使用位域存储每个用户的积分,位域的每个位置对应一个用户。
  • 使用 BITFIELD user:points SET u32 0 100 将用户 0 的积分设置为 100。
  • 使用 BITFIELD user:points INCRBY u32 0 10 将用户 0 的积分增加 10 分。

资源分配

  • 使用位域记录资源的分配状态,位域的每个位表示一个资源是否被占用。
  • 使用 BITFIELD resources SET u1 0 1 表示资源 0 已被占用。
  • 使用 BITFIELD resources GET u1 0 检查资源 0 是否被占用。

三、流

3.1 什么是流?

流是 Redis 中一种用于处理高吞吐量消息队列的数据结构,支持消息的存储、消费和分组。

3.2 核心命令

  • XADD key MAXLEN count * field value:向流中添加一条消息,MAXLEN 用于限制流的长度。
  • XREAD COUNT count STREAMS key ID:读取消息,ID 指定从哪个消息开始读取。
  • XGROUP CREATE key groupname id:创建消费组,用于消息的分组消费。
  • XREADGROUP GROUP groupname consumername COUNT count STREAMS key >:从消费组中读取消息。

3.3 实际应用

聊天系统

  • 使用 XADD chat:room1 * user "Alice" message "Hello" 向房间 1 发送消息。
  • 使用 XREAD COUNT 1 STREAMS chat:room1 0 读取房间 1 的所有消息。

日志收集系统

  • 使用 XADD logs:* * level "ERROR" message "System failure" 记录日志。
  • 使用 XREAD COUNT 10 STREAMS logs 0 读取最近 10 条日志。

四、地理空间

4.1 什么是地理空间?

Redis 的地理空间功能允许存储和查询地理位置信息,支持基于经纬度的存储和范围查询。

4.2 核心命令

  • GEOADD key longitude latitude member:将地理位置信息添加到指定键中。
  • GEORADIUS key longitude latitude radius unit:查询指定范围内的地理位置。
  • GEODIST key member1 member2 unit:计算两个地理位置之间的距离。

4.3 实际应用

LBS(基于位置的服务)

  • 使用 GEOADD restaurants 116.4 39.9 "McDonald's" 存储餐厅的地理位置。
  • 使用 GEORADIUS restaurants 116.4 39.9 5 km 查询距离用户 5 公里内的餐厅。
  • 使用 GEODIST restaurants "McDonald's" "KFC" km 计算两家餐厅之间的距离。

五、集合随机返回数据

5.1 什么是集合?

集合是 Redis 中一种无序的字符串集合,支持添加、删除和随机返回元素。

5.2 核心命令

  • SADD key member:向集合中添加一个元素。
  • SREM key member:从集合中删除一个元素。
  • SRANDMEMBER key [count]:随机返回一个或多个元素,count 为负数时会移除返回的元素。

5.3 实际应用

抽奖系统

  • 使用 SADD prizes "iPhone" "iPad" "AirPods" 存储奖品。
  • 使用 SRANDMEMBER prizes 1 随机抽取一个奖品。
  • 使用 SRANDMEMBER prizes -1 随机抽取并移除一个奖品。

六、SCAN 命令

6.1 什么是 SCAN?

SCAN 是 Redis 中用于遍历键空间的命令,相比传统的 KEYS 命令,SCAN 更加高效且不会阻塞服务器。

6.2 核心命令

  • SCAN cursor [MATCH pattern] [COUNT count]:遍历键空间,cursor 是游标,MATCH 用于指定匹配模式,COUNT 用于指定每次迭代返回的元素数量。

6.3 实际应用

遍历所有键

  • 使用 SCAN 0 开始遍历,直到返回的游标为 0。
  • 示例:
    SCAN 0 MATCH user:* COUNT 10
    

查找特定模式的键

  • 使用 SCAN 配合 MATCH 查找符合特定模式的键。
  • 示例:
    SCAN 0 MATCH "log:2023*" COUNT 100
    

网站公告

今日签到

点亮在社区的每一天
去签到