首页 > 编程语言 >Java限制某段时间内某个请求的次数(代码库)

Java限制某段时间内某个请求的次数(代码库)

时间:2023-08-24 17:12:07浏览次数:54  
标签:Java 段时间 次数 guavaCache num TestObj put null public

关键就是统计次数

技巧:
1、使用guava cache缓存 来计数
2、利用引用变量的特性,减少put,只使用get

如果重新put赋值,缓存的时间会刷新,比如下面例子的b,一共输出了7次,而a只输出了5次

import com.google.common.cache.Cache;

public class Test2 {
    private static Cache<String, TestObj> guavaCache = CacheFactory.cached(5L, null);
    public static void main(String[] args) {
        guavaCache.put("a", new TestObj());
        guavaCache.put("b", new TestObj());
        for (int i = 0; i < 10; i++) {
            TestObj a = guavaCache.getIfPresent("a");
            if (a == null) {
                System.out.println("a == null");
            } else {
                a.setNum(a.getNum() + 1);
                System.out.println("a == " + a.getNum());
            }

            TestObj b = guavaCache.getIfPresent("b");
            if (b == null) {
                System.out.println("b == null");
            } else {
                b.setNum(b.getNum() + 1);
                System.out.println("b == " + b.getNum());
            }

            if (i == 2) {
                TestObj tmp = new TestObj();
                tmp.setNum(1000);
                guavaCache.put("b", tmp);
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 

public class TestObj {
    private int num = 0;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}

 

输出内容如下:

a == 1
b == 1
a == 2
b == 2
a == 3
b == 3
a == 4
b == 1001
a == 5
b == 1002
a == null
b == 1003
a == null
b == 1004
a == null
b == null
a == null
b == null
a == null
b == null

 

原创文章,欢迎转载,转载请注明出处!

标签:Java,段时间,次数,guavaCache,num,TestObj,put,null,public
From: https://www.cnblogs.com/acm-bingzi/p/java_count_num.html

相关文章

  • javascript实现大文件上传下载
    ​ IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续......
  • java三大特性概述
    内部类将一个类定义在另一个类里面,里面的那个类就称为内部类。内部类的出现,再次打破了Java单继承的局限性。封装封装的定义封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。封装的好处良好的......
  • JavaSE(2)(简单了解idea, 项目结构,运算符,数据转换,原反补码)
    JavaSE(2)(简单了解idea,项目结构,运算符,数据转换,原反补码)p28idea项目结构project项目 > module模块 > package包 > class类拿微信举例,微信就是项目,它下方的四大功能(微信,通讯录,发现,我)就是模块,一个项目是包含一个或多个模块的.以第一个微信模块为例,我们......
  • Java
    https://blog.csdn.net/Eric_splendid/article/details/79898536 测试:1.06GB视频文件,耗时17秒importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.channels.FileChannel;//原文链接:http......
  • JavaScript基础语法
    一、JavaScript概述1.1、JavaScript可以做什么1.1.1、页面的各种动画效果1.1.2、页面的点击/移入响应1.1.3、对客户端数据进行验证1.1.4、各种页面小游戏1.1.5、用途总结嵌入动态文本于HTML页面。对浏览器事件做出响应(对于用户的操作给予响应)。读写HTML元素。在......
  • Java方法
          递归层数太高时,会占用较大的内存......
  • java裁切NC文件并转成Json
    importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importorg.junit.Test;importucar.ma2.Index;importucar.nc2.NetcdfFile;importucar.ma2.Array;importjava.io.FileWriter;importjava.io.IOException;publicclassNetCDF2JS......
  • java实现大文件上传下载
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭......
  • Java流程控制
         ......
  • 快手Java一面11问(附参考答案)
    现在已经到了面试招聘比较火热的时候,后续会分享一些面试真题供大家复习参考。准备面试的过程中,一定要多看面经,多自测!今天分享的是一位贵州大学的同学分享的快手一面面经。快手一面主要会问一些基础问题,也就是比较简单且容易准备的常规八股,通常不会问项目。到了二面,会开始问项目,......