php专区

 首页 > php专区 > PHP应用 > php类库 > php缓存Memcache的Queue的用法 - php类库

php缓存Memcache的Queue的用法 - php类库

分享到:
【字体:
导读:
          分享一篇关于php中缓存Memcache的Queue的用法,Memcache是一种缓存技术,可以提升程序的性能减轻服务器的压力,代码如下:?phpclassMQ{publicstatic$client;privatestatic$m_real;privatestatic$m_fro......

php缓存Memcache的Queue的用法

分享一篇关于php中缓存Memcache的Queue的用法,Memcache是一种缓存技术,可以提升程序的性能减轻服务器的压力,代码如下:

  1. class MQ{  
  2. public static $client;  
  3. private static $m_real;  
  4. private static $m_front;  
  5. private static $m_data = array();  
  6. const QUEUE_MAX_NUM = 100000000;  
  7. const QUEUE_FRONT_KEY = '_queue_item_front';  
  8. const QUEUE_REAL_KEY = '_queue_item_real';  
  9. public static function setupMq($conf) {  
  10. self::$client = memcache_pconnect($conf);  
  11. self::$m_real = memcache_get(self::$client, self::QUEUE_REAL_KEY);  
  12. self::$m_front = memcache_get(self::$client, self::QUEUE_FRONT_KEY);  
  13. if (!isset(self::$m_real) || emptyempty(self::$m_real)) {  
  14. self::$real= 0;  
  15. }  
  16. if (!isset(self::$m_front) || emptyempty(self::$m_front)) {  
  17. self::$m_front = 0;  
  18. }  
  19. return self::$client;  
  20. }  
  21. public static function add($queue$data) {  
  22. $result = false;  
  23. if (self::$m_real < self::QUEUE_MAX_NUM) {  
  24. if (memcache_add(self::$client$queue.self::$m_real$data)) {  
  25. self::mqRealChange();  
  26. $result = true;  
  27. }  
  28. }  
  29. return $result;  
  30. }  
  31. public static function get($key$count) {  
  32. $num = 0;  
  33. for ($i=self::$m_front;$i$m_front + $count;$i++) {  
  34. if ($dataTmp = memcache_get(self::$client$key.$i)) {  
  35. self::$m_data[] = $dataTmp;  
  36. memcache_delete(self::$client$key.$i);  
  37. $num++;  
  38. }  
  39. }  
  40. if ($num>0) {  
  41. self::mqFrontChange($num);  
  42. }  
  43. return self::$m_data;  
  44. }  
  45. private static function mqRealChange() {  
  46. memcache_add(self::$client, self::QUEUE_REAL_KEY, 0);  
  47. self::$m_real = memcache_increment(self::$client, self::QUEUE_REAL_KEY, 1);  
  48. }  
  49. private static function mqFrontChange($num) {  
  50. memcache_add(self::$client, self::QUEUE_FRONT_KEY, 0);  
  51. self::$m_front = memcache_increment(self::$client, self::QUEUE_FRONT_KEY, $num);  
  52. }  
  53. public static function mflush($memcache_obj) {  
  54. memcache_flush($memcache_obj);  
  55. }  
  56. public static function Debug() {  
  57. echo 'real:'.self::$m_real."
    /r/n"
    ;  
  58. echo 'front:'.self::$m_front."
    /r/n"
    ;  
  59. echo 'wait for process data:'.intval(self::$m_real - self::$m_front);  
  60. echo "
    /r/n"
    ;  
  61. echo '
    ';  
  62. print_r(self::$m_data);  
  63. echo '
    ';  
  64. }  
  65. }  
  66. define('FLUSH_MQ',0);//CLEAN ALL DATA  
  67. define('IS_ADD',0);//SET DATA  
  68. //开源代码phpfensi.com 
  69. $mobj = MQ::setupMq('127.0.0.1','11211');  
  70. if (FLUSH_MQ) {  
  71. MQ::mflush($mobj);  
  72. else {  
  73. if (IS_ADD) {  
  74. MQ::add('user_sync''1test');  
  75. MQ::add('user_sync''2test');  
  76. MQ::add('user_sync''3test');  
  77. MQ::add('user_sync''4test');  
  78. MQ::add('user_sync''5test');  
  79. MQ::add('user_sync''6test');  
  80. else {  
  81. MQ::get('user_sync', 10);  
  82. }  
  83. }  
  84. MQ::Debug();  
  85. ?> 

好了下面来看看用法,代码如下:

  1. MQ::setupMq('127.0.0.1','11211');//连接  
  2. MQ::add($key$value);//添加数据到队列  
  3. MQ::add($key$value);//添加数据到队列  
  4. MQ::add($key$value);//添加数据到队列  
  5. MQ::add($key$value);//添加数据到队列  
  6. MQ::add($key$value);//添加数据到队列  
  7. MQ::add($key$value);//添加数据到队列  
  8. MQ:get($key, 10);//取出一定数量的数据
分享到:
php数据库操作类,可用mysql,mssql,pg - p...
php数据库操作类,可用mysql,mssql,pg 文章分享的这篇文章是因为这篇文章数据库操作类可用mysql,mssql,pg三种数据库,你只要作任何修改就可以方便的改变你数据库的类型. 函数清单,索引: Open:打开数据库连接 Line:71 Close:关闭数据库连接 Line:107 SelectDB:选择数据库 Line:129 Query:创...
PHPExcel用法详细的介绍 - php类库
PHPExcel用法详细的介绍 PHPExcel下载地址:http://phpexcel.codeplex.com/ 导入PHPExcel.php或者其他文件,代码如下: require_once &#039;PHPExcel.php&#039;; ////require_once&#039;PHPExcel/Writer/Excel5.php&#039;;     // 用于其他低版本xls   // or  ////requi...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……