用Redis做QPS限制

  1. 通过set(final String key, final String value, final String nxxx, final String expx, final int time)
/**
 *
 * @param key
 * @param value
 * @param nxxx NX = 仅当key不存在时设置;XX = 仅当key存在时设置
 * @param expx EX = 秒;PX = 毫秒
 * @param time 过期时间
 * @return 设置成功返回“OK”
 */
public String set(final String key, final String value, final String nxxx, final String expx,
      final int time) {
    checkIsInMultiOrPipeline();
    client.set(key, value, nxxx, expx, time);
    return client.getStatusCodeReply();
}
  1. 通过过期时间和值加1
/**
 * 每分钟限制访问数
 */
private static final long limitPerMinute = 200;

public boolean limitQps(final String key) {
    if(redis.exists(key)) {
        long count = redis.incr(key);
        if(count > limitPerMinute) {
            return false;
        }
    } else {
        redis.setex(key, 60, "1");
    }
    return true;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,908评论 18 139
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,769评论 0 33
  • Redis的五种数据结构如下: String:字符串 Hash:字典 List:列表 Set:集合 Sorted ...
    yannhuang阅读 5,160评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • 昨天是七夕,小年轻们都把它当成情人节来过。一早,阿莹在群里发来照片,男朋友送她一个礼盒。她说:“我很高兴,但是打开...
    mimi播报阅读 507评论 6 4