在做puv统计时碰到的一个问题,用户请求过来会记录为一个pv,记录到redis中,但由于pv量太大会给redis造成过大压力,所以做个缓存,当pv满10条了发一次。用了一个队列ArrayList实现,但队列的插入、删除在并发条件下不可行,所以在方法上加了synchronized:staticArrayListpvList=newArrayList();publicsynchronizedvoidcountPv(...){//........生成一个PV对象pvList.add(PV)if(pvList.size()>10){//前10个加到redisaddRedis(pvList.subList(0,10))}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
staticArrayListpvList=newArrayList();publicsynchronizedvoidcountPv(...){//........生成一个PV对象pvList.add(PV)if(pvList.size()>10){//前10个加到redisaddRedis(pvList.subList(0,10))}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
publicsynchronizedvoidcountPv(...){//........生成一个PV对象pvList.add(PV)if(pvList.size()>10){//前10个加到redisaddRedis(pvList.subList(0,10))}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
//........生成一个PV对象pvList.add(PV)if(pvList.size()>10){//前10个加到redisaddRedis(pvList.subList(0,10))}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
pvList.add(PV)if(pvList.size()>10){//前10个加到redisaddRedis(pvList.subList(0,10))}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
if(pvList.size()>10){//前10个加到redisaddRedis(pvList.subList(0,10))}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
//前10个加到redisaddRedis(pvList.subList(0,10))}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
addRedis(pvList.subList(0,10))}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
}//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
//删除10个pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
pvList.subList(0,10).clear();}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
}但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
每10个请求发一次,而后删除,同时可以满足不断累加synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
ConcurrnetLinkedQueue,Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合p.s.您能留段伪码就最好了
p.s.您能留段伪码就最好了
萧十郎
蛊毒传说
相关分类