Redis--基础知识点--25--redis使用场景

1 缓存
Redis作为高性能的缓存系统,可以用于缓存热点数据,以减少对数据库的访问次数和提高系统的响应速度。

2 消息队列
Redis支持发布订阅模式,可以作为轻量级的消息队列使用,用于异步处理任务或实现消息通知等功能。

3 计数器
Redis支持原子性操作,可以使用Redis实现计数器等功能,如浏览量统计、点赞数统计等。

4 排行榜
Redis支持有序集合,可以使用Redis实现排行榜等功能,如热门商品排行、热门文章排行等。

5 分布式锁
Redis支持分布式锁,可以用于分布式系统中实现数据同步和互斥访问等功能。

6 地理位置查询
Redis支持地理位置查询,可以使用Redis实现附近的人、地点查询等功能。

7 会话管理
Redis可以用于会话管理,可以存储用户的登录状态、购物车信息等。

8 限流
Redis可以利用incrby命令以及过期时间 来做限流。

比如:key是用户ip,value是访问的次数从1开始,后面每访问一次则加1。
如果value超过一定的次数,则直接拦截这种异常的ip。
当然也需要设置一个过期时间,异常ip如果超过这个过期时间,比如:1天,则恢复正常了,该ip可以再发起请求了。
或者限制同一个用户id。

9 位统计
Redis 支持位图,可以用于打卡、海量数据去重,用户是否在线功能。

[1] 用户行为统计(签到、打卡)
场景:记录用户每日签到状态,统计连续签到天数或月度签到率。
实现:

  • 存储:用 Bitmap 的每一位表示用户某天是否签到(1=已签到,0=未签到)。
  • 示例:记录用户 user:1001 在 2025 年 5 月的签到情况(31 天需 31 位)。
# 设置 5 月 1 日签到(偏移量 0 表示第 1 天)
SETBIT user:1001:202505 0 1
 
# 查询 5 月 15 日是否签到
GETBIT user:1001:202505 14  # 返回 1 表示已签到
 
# 统计 5 月签到天数
BITCOUNT user:1001:202505   # 返回整数结果

优势:

  • 内存占用极低:31 天仅需 4 字节(31 bits ≈ 4 bytes)。
  • 支持快速统计:BITCOUNT 操作时间复杂度为 O(1)。

[2] 实时用户在线状态
场景:实时统计百万级用户在线状态,快速判断用户是否在线。
实现:

  • 存储:用 Bitmap 的每一位表示用户是否在线。
  • 示例:维护一个全局在线状态 Bitmap online_users。
# 用户 5001 上线
SETBIT online_users 5000 1
 
# 用户 5001 下线
SETBIT online_users 5000 0
 
# 判断用户 5001 是否在线
GETBIT online_users 5000
 
# 统计在线用户总数
BITCOUNT online_users

优势:

  • 内存高效:1 亿用户仅需约 12MB 内存(100,000,000 bits ≈ 11.92MB)。
  • 快速查询:GETBIT 和 SETBIT 操作时间复杂度为 O(1)。

[3] 实时数据去重(布隆过滤器替代方案)
场景:高速判断元素是否存在于海量集合中(如 URL 去重)。
实现:

  • 存储:用 Bitmap 的每一位表示元素是否存在。
  • 示例:记录已访问的 URL(假设 URL 通过哈希映射到 Bitmap 偏移量)。
# 标记 URL "https://example.com/page1" 已访问
SETBIT url_visited:20250515 12345 1  # 12345 为哈希值
 
# 查询 URL 是否已访问
GETBIT url_visited:20250515 12345

注意:

  • Bitmap 本身存在哈希冲突风险,需结合哈希函数设计(如双重哈希)。
  • 对于更高准确率需求,可结合 HyperLogLog 或布隆过滤器。

10 生成全局ID

Redis可以使用incrby命令,利用原子性操作,执行命令:incrby userid 10000 。

在分库分表的场景,对于有些批量操作,我们可以从Redis中,一次性拿一批id出来,然后给业务系统使用。

11 获取分类树

了解即可
Redis–基础知识点–26–redis缓存分类树
redis 中的 RedisJSON模块

你可能感兴趣的:(Redis,redis)