热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何手动撸一个能够满足下列并发的队列?

在做puv统计时碰到的一个问题,用户请求过来会记录为一个pv,记录到redis中,但由于pv量太大会给redis造成过大压力,所以做个缓存,当pv满10条了发一次。用了一个队列ArrayList

在做puv统计时碰到的一个问题,用户请求过来会记录为一个pv,记录到redis中,但由于pv量太大会给redis造成过大压力,所以做个缓存,当pv满10条了发一次。用了一个队列ArrayList实现,但队列的插入、删除在并发条件下不可行,所以在方法上加了synchronized:



1
2
3
4
5
6
7
8
9
10
11
static ArrayList pvList = new ArrayList();

public synchronized void countPv(...){

    //........生成一个PV对象

    pvList.add(PV)

    if(pvList.size()>10){

        //前10个加到redis

        addRedis(pvList.subList(0,10))

    }

    //删除10个

    pvList.subList(0,10).clear();

}

但在压力测试中,如果已满负荷的连续压测,发现会丢掉一些pv,可能是synchronized造成的堵塞导致,如何更好的实现这个需求呢?

每10个请求发一次,而后删除,同时可以满足不断累加




  1. synchronized放到函数里面估计提升并不大,毕竟add,size,clear方法都必须满足同步需求

  2. ConcurrnetLinkedQueue, Concurrent...Array删除、查找的开销都非常大,而且貌似没法用于这种场合

p.s. 您能留段伪码就最好了


   



推荐阅读
  • Java回收对象的标记和对象的二次标记过程一、对象的标记1、什么是标记?怎么标记?第一个问题相信大家都知道,标记就是对一些已死的对象打上记号,方便垃圾收 ... [详细]
  • 一、腐烂的橘子1、题目描 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Android性能优化检测App卡顿
    在移动APP性能评测-流畅度评测中,我们介绍了如何准确客观评价APP的流畅度,最终采用SM指标来评价应用的流畅度,在知道如何评价流畅度之后 ... [详细]
  • C#按值复制数组我有一个类型化的数组MyType[]types;我想制作这个数组的独立副本。我试过这个MyType[]types2newMyType[types.Length];t ... [详细]
  • GCD其实已经了解了很久了,在实际工程中也会经常用,但是其实很多实践都是浅尝辄止。最近又在回头看这块儿的内容,有一些知识点, ... [详细]
  • 开发笔记:Xunit测试使用个人小结
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Xunit测试使用个人小结相关的知识,希望对你有一定的参考价值。因工作中用到xunit测试,故总结下用法,以供个人参考使 ... [详细]
  • 1、dispatch_barrier_asyncdispatch_barrier_async用于等待前面的任务执行完毕后自己才执行,而它后面的任务需等待它完成之后才执 ... [详细]
  • 开发笔记:携程2019校招编程题
    本文由编程笔记#小编为大家整理,主要介绍了携程2019校招编程题相关的知识,希望对你有一定的参考价值。携程今年的机试题为20道选择+3编程由于今天最后提交时第三题 ... [详细]
  • 1、对于List而言,要不然就使用迭代器,要不然就从后往前删除,从前往后删除会出现角标越界。因为我List有两个remove方法,一个是int作为形参(删除指定位置的元素),一个是 ... [详细]
  • 一、ImageRequest不知道将ImageRequest放在这里进行介绍是否合适,因为毕竟它属于一个请求队列,与StringRequest、Json ... [详细]
  • RabbitMQ之队列与消息持久化
    队列持久化在之前的例子中,我们所用的队列都是临时队列,当服务重启后之前创建的队列就都没有了。队列的持久化是在定义队列时的第二个参数决定的(false为队列不用持久化)channel.queueDecl ... [详细]
  • Mybatis源码解析——Executor
    ExecutorExecutor提供了数据库操作的一些方法以及Mybatis的缓存和事物管理功能。模板方法模式要实现某个方法,必须经过很多算法,但这些算法的顺序是固定的,将算法的运 ... [详细]
  • 服务器性能优化之网络性能优化
    hi,大家好,今天分享一篇后台服务器性能优 ... [详细]
author-avatar
caozhizhao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有