当前位置:首页 > PHP教程 > php高级应用 > 列表

在 PHP 中将 Redis 封装成单例模式

发布:smiling 来源: PHP粉丝网  添加日期:2022-06-23 08:46:59 浏览: 评论:0 

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。

使用工厂方法来限制实例化过程,这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。

  1. <?php 
  2.  
  3. /**  
  4.  
  5. * Created by PhpStorm.  
  6.  
  7. * User: Administrator  
  8.  
  9. * Date: 2018/7/16  
  10.  
  11. * Time: 14:19  
  12.  
  13. */ 
  14.  
  15. /**  
  16.  
  17. * 实现同步实现同步redis  
  18.  
  19. */ 
  20.  
  21. namespace  app\common\lib\redis; 
  22.  
  23. class Predis{  
  24.  
  25.      
  26.  
  27. /**      
  28.  
  29. * 单例模式的变量      
  30.  
  31. * @var null      
  32.  
  33. */    
  34.  
  35. private static $_instance=null;      
  36.  
  37. public $redis = ''
  38.  
  39.         
  40.  
  41. /**      
  42.  
  43. * 单例模式应用防止多次连接redis,提高性能      
  44.  
  45. * @return Predis|null      
  46.  
  47. */    
  48.  
  49. public static function getInstance(){         
  50.  
  51.     if(is_null(self::$_instance) || emptyempty(self::$_instance)){             
  52.  
  53.         self::$_instance = new self();         
  54.  
  55.     }         
  56.  
  57.     return self::$_instance;     
  58.  
  59.  
  60.         
  61.  
  62. /**      
  63.  
  64. *连接redis      
  65.  
  66. */    
  67.  
  68. private function __construct()    {         
  69.  
  70.     $this->redis = new \Redis();         
  71.  
  72.     $result = $this->redis->connect(config('redis.host'), config('redis.port'));        
  73.  
  74.     if($result==false){             
  75.  
  76.         throw new \Exception('redis connect fail');         
  77.  
  78.     }      
  79.  
  80. }      
  81.  
  82. /**      
  83.  
  84. *redis set方法的应用      
  85.  
  86. * @param $key      
  87.  
  88. * @param $value      
  89.  
  90. * @param int $time      
  91.  
  92. * @return bool|string      
  93.  
  94. */    
  95.  
  96. public function set($key,$value,$time=0){         
  97.  
  98.     if(!$key){             
  99.  
  100.         return '';         
  101.  
  102.     }          
  103.  
  104.     if(is_array($value)){             
  105.  
  106.         $value = json_encode($value);        
  107.  
  108.     }          
  109.  
  110.     if(!$time){             
  111.  
  112.         return $this->redis->set($key,$value);        
  113.  
  114.     }         
  115.  
  116.     return $this->redis->setex($key,$time,$value);     
  117.  
  118. }      
  119.  
  120. /**      
  121.  
  122. * redis get方法      
  123.  
  124. * @param $key      
  125.  
  126. * @return string      
  127.  
  128. */    
  129.  
  130. public function get($key){         
  131.  
  132.     if(!$key){             
  133.  
  134.         return '';         
  135.  
  136.     }         
  137.  
  138.     return $this->redis->get($key);     
  139.  
  140. }      
  141.  
  142. /**      
  143.  
  144. * 获取有序列表的结合      
  145.  
  146. * @param $key      
  147.  
  148. * @return array      
  149.  
  150. */    
  151.  
  152. public function sMembers($key) {         
  153.  
  154.     return $this->redis->sMembers($key);     
  155.  
  156. }       
  157.  
  158. /**      
  159.  
  160. * 获取list的元素值结合      
  161.  
  162. */    
  163.  
  164. public function lRange($key){         
  165.  
  166.     var_dump($key);         
  167.  
  168.     return $this->redis->lRange($key,0,-1);     
  169.  
  170. }      
  171.  
  172. /**      
  173.  
  174. * 魔术方法__call      
  175.  
  176. */    
  177.  
  178. public function __call($name$arguments) {         
  179.  
  180.     echo $name.PHP_EOL;         
  181.  
  182.     print_r($arguments);         
  183.  
  184.     if(count($arguments) != 2) {             
  185.  
  186.         return '';        
  187.  
  188.     }         
  189.  
  190.     $this->redis->$name($arguments[0], $arguments[1]);    
  191.  
  192. }  
  193.  
  194. }

Tags: Redis单例模式 PHP单例模式

分享到: