首页 > php教程 > php手册 > 正文

PHP 队列

WBOY
发布: 2016-06-06 19:54:36
原创
1043 人浏览过

什么是队列,是先进先出的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端进行插入操作,在前端进行删除操作。 什么情况下会用了队列呢,并发请求又要保证事务的完整性的时候就会用到队列,当然不排除使用其它更好的方法,知道的不仿说说看

什么是队列,是先进先出的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端进行插入操作,在前端进行删除操作。

什么情况下会用了队列呢,并发请求又要保证事务的完整性的时候就会用到队列,当然不排除使用其它更好的方法,知道的不仿说说看。

队列还可以用于减轻数据库服务器压力,我们可以将不是即时数据放入到队列中,在数据库空闲的时候或者间隔一段时间后执行。比如访问计数器,没有必要即时的执行访问增加的Sql,在没有使用队列的时候sql语句是这样的,假设有5个人访问:

  1. update table1 set count=count 1 where id=1 
  2. update table1 set count=count 1 where id=1 
  3. update table1 set count=count 1 where id=1 
  4. update table1 set count=count 1 where id=1 
  5. update table1 set count=count 1 where id=1 
update table1 set count=count+1 where id=1 update table1 set count=count+1 where id=1 update table1 set count=count+1 where id=1 update table1 set count=count+1 where id=1 update table1 set count=count+1 where id=1
登录后复制

而使用队列这后就可以这样:

  1. update table1 set count=count 5 where id=1 
update table1 set count=count+5 where id=1
登录后复制

减少sql请求次数,从而达到减轻服务器压力的效果, 当然访问量不是很大网站根本没有这个必要。

下面一个队列类:

  1. /**
  2. * 队列
  3. *
  4. * @author jaclon
  5. *
  6. */ 
  7. 班级 队列
  8. 私有$_queue = 数组(); 
  9. 受保护$cache = null; 
  10. 受保护$queuecachename
  11.  
  12. /**
  13. * 构造方法
  14. * @param string $queuename 队列名称
  15. */ 
  16. 函数 __construct($queuename
  17.  
  18. $this->cache =& Cache::instance(); 
  19. $this->queuecachename = 'queue_'$队列名称
  20.  
  21. $结果 = $这个 ->缓存->get($this->queuecachename); 
  22. if (is_array($结果)) { 
  23. $这个->_queue = $结果
  24.  
  25. /**
  26. * 将一个单元单元放入队列末尾
  27. * @param mixed $value
  28. */ 
  29. 函数 enQueue( $value
  30. $这个->_queue[] = $value
  31. $这个->缓存->设置($这个- >queuecachename, $this->_queue); 
  32.  
  33. 返回$这个
  34.  
  35. /**
  36. * 将队列开头的一个或多个单元移出
  37. * @param int $num
  38. * / 
  39. 函数 sliceQueue($num = 1 ) 
  40. if (计数 ($this->_queue) $num) { 
  41. $num = 计数($this->_queue ); 
  42. $output = array_splice ($this->_queue, 0, $num); 
  43. $这个->缓存->设置($这个- >queuecachename, $this->_queue); 
  44.  
  45. 返回$output
  46.  
  47. /**
  48. * 将队列开头的单元移出队列
  49. * / 
  50. 函数 deQueue() 
  51. $entry = array_shift($这个 ->_队列); 
  52. $这个->缓存->设置($这个- >queuecachename, $this->_queue); 
  53.  
  54. 返回$条目
  55.  
  56. /**
  57. * 返回队列长度
  58. */ 
  59. 函数 size() 
  60. 返回计数($this->_queue); 
  61.  
  62. /**
  63. * 返回队列中的第一个单元
  64. * / 
  65. 函数 peek() 
  66. 返回$this->_queue[0]; 
  67.  
  68. /**
  69. * 返回队列中的一个或多个单元
  70. * @param int $num
  71. * / 
  72. 函数 偷看($num
  73. 如果 (计数($这个->_queue) $num) { 
  74. $num = 计数($this->_queue); 
  75. 返回array_slice($this->_queue, 0, $num); 
  76.  
  77. /**
  78. * 消毁队列
  79. * / 
  80. 函数 destroy() 
  81. $this->缓存->删除($this->;队列缓存名称); 

http:// /blog.163.com/lgh_2002/blog/static/44017526201172511139202/

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板