java如何将1个list存入缓存中并在缓存在修改数据

具体需求是这样的,服务端实时的接收数据,数据类型是字符串,把接收到的一条条数据放到list里面,list存入缓存,这样服务端把接收30秒的缓存数据统一处理,现在难解决的是... 具体需求是这样的,服务端实时的接收数据,数据类型是字符串,把接收到的一条条数据放到list里面,list存入缓存,这样服务端把接收30秒的缓存数据统一处理,现在难解决的是动态缓存,就是 每接收一条数据,都获取list缓存,然后list.add,30秒后统一处理 展开
 我来答
双鱼泪以干
2017-09-18 · TA获得超过193个赞
知道小有建树答主
回答量:199
采纳率:71%
帮助的人:69.2万
展开全部
public class Test2 {

public static void main(String[] args) {
try {
  List<String> list=new ArrayList<>();
  //模拟传过来的值
  int i=0;
 while (true) {
   Long time= new Date().getTime();
   //将当前时间与值拼接成字符串 保存到list
   list.add("value"+i+","+time);
   //调用处理方法
   processing(list);
   i++;
   //模拟每次传入的时间长度
   Thread.sleep(3000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 public static void processing(List<String> list){
            //第一个存入的值
  String src1=list.get(0);
  //最后一个存入的值
  String src2=list.get(list.size()-1);
  //通过 转换成数组
String [] c1=  src1.split(",");
String [] c2=  src2.split(",");
//拿到第一个存入的 时间字符串 转换成 Long
Long l1 = Long.parseLong(c1[1]);
//拿到最新的 时间字符串 转换成 Long
Long l2 = Long.parseLong(c2[1]);
//如果大于等于30000毫秒就说明了过了30秒清空
if((l2-l1)>=30000){
list.clear();
}
    System.out.println("每次的值"+src2);
     System.out.println("是否30秒清空"+(list.size()==0));
}
}


/*******************************第二种方式*************************************/

public class Test2 {
//定义一个全局变量 用于接收时间
private static Long time=0L;
public static void main(String[] args) {
try {
  List<String> list=new ArrayList<>();
  //模拟传过来的值
  int i=0;
 while (true) {
 //如果list 是在清空状态那么就创建个时间为第一次时间
 if(list.size()==0){
  time= new Date().getTime();
  }
  //将字符串 保存到list
   list.add("value"+i);
   //调用处理方法 ,没次传入一个当前存入对象的时间
   processing(list,new Date().getTime());
   i++;
   //模拟每次传入的时间长度
   Thread.sleep(3000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 public static void processing(List<String> list ,Long times){
           // 当前时间 - 第一次存入的时间  大于等于 30000毫秒 
     //就是过了 30秒执行 清空操作
if((times-time)>=30000){
list.clear();
}
for (String ls:list) {
System.out.println("每次的值"+ls);
}
 System.out.println("是否30秒清空"+(list.size()==0));
}
}

我没有redis  只能模拟一个 你看下 其实 你就多了一步 从缓存中取值 判断不能 等于 30000毫秒 因为 时间会有所偏差 可能大于 所以 大于等于,你要是觉得 毫秒太长你可以 转换成秒存入 在计算


第二种 的话 你的程序 可能不需要太大改掉

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式