java如何将1个list存入缓存中并在缓存在修改数据
具体需求是这样的,服务端实时的接收数据,数据类型是字符串,把接收到的一条条数据放到list里面,list存入缓存,这样服务端把接收30秒的缓存数据统一处理,现在难解决的是...
具体需求是这样的,服务端实时的接收数据,数据类型是字符串,把接收到的一条条数据放到list里面,list存入缓存,这样服务端把接收30秒的缓存数据统一处理,现在难解决的是动态缓存,就是 每接收一条数据,都获取list缓存,然后list.add,30秒后统一处理
展开
1个回答
展开全部
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毫秒 因为 时间会有所偏差 可能大于 所以 大于等于,你要是觉得 毫秒太长你可以 转换成秒存入 在计算
第二种 的话 你的程序 可能不需要太大改掉
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询