| <?php | 
| /** | 
|  * 键-值对的 MQ | 
|  * | 
|  * - 队列存放于Key-Value的缓存中 | 
|  * | 
|  * @author dogstar <chanzonghuang@gmail.com> 20160430 | 
|  */ | 
|   | 
| class Task_MQ_KeyValue implements Task_MQ { | 
|   | 
|     /** | 
|      * @var PhalApi_Cache_Memcached/PhalApi_Cache_Memcache/PhalApi_Cache_File $kvCache 缓存实例 | 
|      */ | 
|     protected $kvCache; | 
|   | 
|     public function __construct(PhalApi_Cache $kvCache) { | 
|         $this->kvCache = $kvCache; | 
|     } | 
|   | 
|     public function add($service, $params = array()) { | 
|         $list = $this->kvCache->get($service); | 
|         if (empty($list)) { | 
|             $list = array(); | 
|         } | 
|   | 
|         $list[] = $params; | 
|   | 
|         $this->kvCache->set($service, $list, $this->getExpireTime()); | 
|   | 
|         $list = $this->kvCache->get($service); | 
|   | 
|         return true; | 
|     } | 
|   | 
|     public function pop($service, $num = 1) { | 
|         $rs = array(); | 
|         if ($num <= 0) { | 
|             return $rs; | 
|         } | 
|   | 
|         $list = $this->kvCache->get($service); | 
|         if (empty($list)) { | 
|             $list = array(); | 
|         } | 
|   | 
|         $rs = array_splice($list, 0, $num); | 
|   | 
|         $this->kvCache->set($service, $list, $this->getExpireTime()); | 
|   | 
|         return $rs; | 
|     } | 
|   | 
|     /** | 
|      * 最大缓存时间,一年 | 
|      */ | 
|     protected function getExpireTime() { | 
|         return 31536000; | 
|     } | 
| } |