当前位置:首页 > 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.  
  65. *连接redis      
  66.  
  67. */    
  68.  
  69. private function __construct()    {         
  70.  
  71.     $this->redis = new \Redis();         
  72.  
  73.     $result = $this->redis->connect(config('redis.host'), config('redis.port'));        
  74.  
  75.     if($result==false){             
  76.  
  77.         throw new \Exception('redis connect fail');         
  78.  
  79.     }      
  80.  
  81. }      
  82.  
  83. /**      
  84.  
  85. *redis set方法的应用      
  86.  
  87. * @param $key      
  88.  
  89. * @param $value      
  90.  
  91. * @param int $time      
  92.  
  93. * @return bool|string      
  94.  
  95. */    
  96.  
  97. public function set($key,$value,$time=0){         
  98.  
  99.     if(!$key){             
  100.  
  101.         return '';         
  102.  
  103.     }          
  104.  
  105.     if(is_array($value)){             
  106.  
  107.         $value = json_encode($value);        
  108.  
  109.     }          
  110.  
  111.     if(!$time){             
  112.  
  113.         return $this->redis->set($key,$value);        
  114.  
  115.     }         
  116.  
  117.     return $this->redis->setex($key,$time,$value);     
  118.  
  119. }      
  120.  
  121. /**      
  122.  
  123. * redis get方法      
  124.  
  125. * @param $key      
  126.  
  127. * @return string      
  128.  
  129. */    
  130.  
  131. public function get($key){         
  132.  
  133.     if(!$key){             
  134.  
  135.         return '';         
  136.  
  137.     }         
  138.  
  139.     return $this->redis->get($key);     
  140.  
  141. }      
  142.  
  143. /**      
  144.  
  145. * 获取有序列表的结合      
  146.  
  147. * @param $key      
  148.  
  149. * @return array      
  150.  
  151. */    
  152.  
  153. public function sMembers($key) {         
  154.  
  155.     return $this->redis->sMembers($key);     
  156.  
  157. }       
  158.  
  159. /**      
  160.  
  161. * 获取list的元素值结合      
  162.  
  163. */    
  164.  
  165. public function lRange($key){         
  166.  
  167.     var_dump($key);         
  168.  
  169.     return $this->redis->lRange($key,0,-1);     
  170.  
  171. }      
  172.  
  173. /**      
  174.  
  175. * 魔术方法__call      
  176.  
  177. */    
  178.  
  179. public function __call($name, $arguments) {         
  180.  
  181.     echo $name.PHP_EOL;         
  182.  
  183.     print_r($arguments);         
  184.  
  185.     if(count($arguments) != 2) {             
  186.  
  187.         return '';        
  188.  
  189.     }         
  190.  
  191.     $this->redis->$name($arguments[0], $arguments[1]);    
  192.  
  193. }  
  194.  
  195. }

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

分享到: