【Redis实战】Redis 简单实战

Redis 实战

1、Navigation Session

需求:用户60秒内访问的N个网站页面,或许包含当前 TA 正在看或者感兴趣的东西。由此可以推荐对应的广告,使得用户更容易对投放的广告感兴趣。

利用Redis可以简单实现:

MULTI
RPUSH pagewviews.user:<userid> http://.....
EXPIRE pagewviews.user:<userid> 60
EXEC

2、Redis 缓存常用数据

图片:String,hash 数据类型

3、拼团活动缓存

需求:热门商品会有拼团,进行促销或者引流。特点是:推广阶段会有大量的人去创建拼团,等团的人数满了,才算商品购买成功,这一期间会频繁查询数据库,看团是否满。

为了减轻数据库的压力,可以将拼团信息存放在Redis 缓存中。

  • activityId 拼团活动id
  • activityCount 设置的成团人数
  • memberId 用户id

开团会创建一个拼团活动,这时会去数据库把拼团商品的成团人数activityCount设定查出来,同时生成一个activityId,使用哈希表的数据结构将拼团活动id和人数存放在groupPurchasing哈希表中。

如何确定某个用户是否参加了某个拼团活动呢?以 activityId 作为Set集合的key,用户的memberId 作为value。当用户创建了一个拼团的活动时,利用集合的数据结构:以活动id为key,memberId为value,利用集合的特性防止用户重复参团。这样有新的用户参团的时候,检查拼团活动的状态就直接去缓存中查找就行。

  • groupPurchasing 哈希表:hset groupPurchasing activityId activityCount
  • Set 集合:SADD activityId memberId

判断该用户是否重复参团:

  • SISMEMBER activityId memberId

成功参团后,将剩余所需参团人数减1:

  • HINCBY groupPurchasing activityId -1

当团满人,所有人都成功付款的时候,将拼团信息从groupPurchasing哈希表中删除

  • HDEL groupPurchasing activityId

上述只是讲了核心实现方法,还有其他的细枝末节没有讲到。
//TODO 拼团的核心逻辑

4、次数限制器 Rate Limiter

需求:限制单个IP地址一秒内访问服务器API资源的次数为10次

应用场景:当系统的能力有限,无法对外界提供更多服务的时候,限流就是一个很好的解决方法。
比如活动抢票的时候,有时候返回的界面是:“活动太火爆,请稍后再试”,这种可以通过在前端简单设置随机算法就可以实现。

在一些UCG社区,一些风控策略,比如用户单位时间的点赞次数,转发次数等会受到限制。

在一些裂变活动中,为了防止羊毛党,也会设置参与活动次数相关的限制等。

总结就是:控制用户行为。

4.1、实现方法一:利用计数器,

利用计数器对每个IP在访问的那一秒内的访问次数进行计数。

使用MULTI 和EXEC 组合(原子操作),保证在每一次API访问的时候设置自增和过期时间。
缺点:依赖Redis实例的时间戳。

/**
 * @方法: LIMIT_API_CALL
 * @param ip 访问者的ip地址
 */
FUNCTION LIMIT_API_CALL(ip)
// 当前时间
ts = CURRENT_UNIX_TIME()
// 生成 key
keyname = ip+":"+ts
current = GET(keyname)
//判断当前ip在ts时的访问次数 
IF current != NULL AND current > 10 THEN
    ERROR "too many requests per second"
ELSE
    MULTI
    	// 访问次数自增
        INCR(keyname,1)
    	// 设置过期时间 10s
        EXPIRE(keyname,10)
    EXEC
    PERFORM_API_CALL(
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值