redis key 重命名如何无缝升级
我想大声告诉你
我想大声告诉你 2017-04-25 09:04:18
0
1
817

抽奖活动每天每个用户限抽3次 且通过redis计数来防超抽
目前key的格式如下所示

mobile_%s_date_yyyyMMdd_draw_count

因抽奖目前只有一个活动 但后期可能同时存在多个抽奖活动(每个活动有不同的奖品和配置 如中奖概率等) 而每个抽奖活动都是独立的 在A活动中抽完3次后,仍可以去B活动抽奖 所以之前的key就不合适了

需要加上活动ID 如

activity_%d_mobile_%s_date_%s_draw_count

但发现无缝上线就不方便了

比如在代码上线前统一重命名已有的key 如

rename mobile_%s_date_yyyyMMdd_draw_count activity_%d_mobile_%s_date_yyyyMMdd_draw_count

但是在上线期间(如有16个tomcat实例 逐个更新) 若有用户访问 这时仍去调用的旧接口 所以仍用的不含活动前缀(activity_%d)的key 这样导致一个问题 在这段期间内抽完的用户当天稍后再次进来的时候 因为新key不存在 所以相当于当天首次来抽 所以还能继续抽3次 该如何避免这种问题呢?

现在想到的解决方案 基于线上代码创建一个分支 先修改key为activity_%d_mobile_%s_date_%s_draw_count

if(new Date() > '2016-08-13') { //从第二天开始 启用新key
    String key = format("activity_%d_mobile_%s_date_%s_draw_count",...);
    incr(key);
}else{ //当天仍用旧key
    String key = format("mobile_%s_date_%s_draw_count",...);
    incr(key);
}

这样的话 后面上线的时候就不用显式重命名了 因为早就启用了新key。

除此之外 还有其他的方案吗?

我想大声告诉你
我想大声告诉你

membalas semua(1)
世界只因有你

Nama kunci loteri anda disimpan di bawah kunci redis Apabila aplikasi dimulakan, hanya dapatkan nama kunci loteri daripada kunci ini dan cachenya dalam aplikasi

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan