精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-02-13
假设在高并发查询的情况下,在实际情况下,相同的请求(url相同)应该会很多,所以我在执行具体任务前做一个拦截,wait一段时间,对请求做一个堆积。当wait时间过后,形成一个任务队列,将队列交给后端业务并发运行,这样以前需要多次重复运算的业务,在这个时间段内就只执行了一次。大概就是这样。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-02-17
最后修改:2014-02-17
有几个问题:
- GET 请求一般是读取数据,属于 I/O 密集型,计算量不大 - 如果是计算密集型,并发效率受限于 CPU 核心数,效果有限 - 被拦截等待的任务响应时间会变长 - 完全可以通过缓存来解决重复计算的问题并且粒度更好控制 |
|
返回顶楼 | |
发表时间:2014-02-17
有种东西叫作内存缓存...
|
|
返回顶楼 | |
发表时间:2014-02-17
我也觉得,既然是针对相同的url,为什么不用缓存
|
|
返回顶楼 | |
发表时间:2014-02-18
LRU 缓存?
|
|
返回顶楼 | |
发表时间:2014-02-18
读操作可以有缓存,楼主换个思路做密集型写操作吧,假设写的内容都是简单的数字累加。
|
|
返回顶楼 | |
发表时间:2014-02-19
我觉得这个思路是不对的。。即使url一样。每次提交的数据和参数也不见得是一样。比如一个用户在找某条数据。。在不停的翻页。。翻十页你全部堆到里url池里。。这不就出错了么。。
这还是同一个用户的。 假如不同用户同时登陆,并发查询。。你给那个人返回结果呢。在你看来都是一个url一个请求了不是? |
|
返回顶楼 | |
发表时间:2014-02-19
你的想法有点异步servlet的意思。。请求阻塞,然后队列解决再回调。但是不管一个url重复多少次,你都不能给人合并了。
|
|
返回顶楼 | |
发表时间:2014-02-19
那像论坛的, 点击数, 什么鲜花数,鸡蛋熟,这类的,
还有,帖子总数,不能是实时操作数据库吧。 感觉 这可以用你们说的。 楼主的意思是不使用内存缓存的情况下吧。 大家看看我说的,可以使用楼主的方法吗? |
|
返回顶楼 | |
发表时间:2014-02-20
拦截url,统计访问次数,达到临界值,将返回结果存到缓存中,在一定时间内,相同url高速访问- - 定时清除临界值和缓存结果,或者主动调用。
|
|
返回顶楼 | |