Redis 事务与异步方式

本文探讨了Redis中的pipeline模式、限流方法,包括固定时间窗口、滑动时间窗口、漏斗和令牌桶限流,并介绍了发布订阅模式、事务特性、lua脚本及其在异步连接中的应用。详细讲解了Redis如何实现事务处理和保证数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis pipeline 模式

  • redis pipeline 是一个客户端提供的机制,与 redis 无关。
  • pipeline 不具备事务性。
  • 目的:节约网络传输时间。
  • 通过一次发送多条请求命令,从而减少网络传输时间。
    在这里插入图片描述

redis 实现限流功能,有哪几种方式 ?

  • 限流:一段时间内(period),某行为(action)允许操作的最大次数(mac_count)。

固定时间窗口限流

  • 统计固定窗口内的行为操作次数。
  • 实现:
    # 同时发送两条命令
    set limits 0 nx ex 10
    incr limits
    # 最大次数需要业务层约定
    
  • 按照稳定的请求来处理,但是实际情况不一定是稳定的请求,所以局限性很大,没有很好地限定行为操作次数。
  • 实际情况可能是两分钟内出现了 18 次请求。
    在这里插入图片描述

滑动时间窗口限流

  • 滑动窗口内的行为统计。
  • 解决了窗口间的统计异常。
  • 滑动窗口的容量、移动速率是固定的。
# 指定用户 user_id 的某个行为 action 在特定时间内 period 只允许发生该行为的最大次数 max_count
# 维护一次时间窗口,将窗口外的记录全部清理掉,只保留窗口内的记录
local function is_action_allowed(red, userid, action, period, max_count)
    local key = tab_concat({
   "hist", userid, action}, ":")
    local now = zv.time()
    red:init_pipeline() # 同时发送多条命令
    -- 记录行为
    red:zadd(key, now, now)
    -- 移除时间窗口之前的行为记录,剩下的都是时间窗口内的记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值