NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
# php-redis 操作类 封装 ``` <pre class="calibre29">``` <span class="token1"><</span><span class="token1">?</span>php <span class="token">/** * redis操作类 * 说明,任何为false的串,存在redis中都是空串。 * 只有在key不存在时,才会返回false。 * 这点可用于防止缓存穿透 * */</span> class <span class="token4">Redis</span> <span class="token3">{</span> private $redis<span class="token3">;</span> <span class="token">//当前数据库ID号</span> protected $dbId<span class="token1">=</span><span class="token6">0</span><span class="token3">;</span> <span class="token">//当前权限认证码</span> protected $auth<span class="token3">;</span> <span class="token">/** * 实例化的对象,单例模式. * @var \iphp\db\Redis */</span> static private $_instance<span class="token1">=</span><span class="token4">array</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> private $k<span class="token3">;</span> <span class="token">//连接属性数组</span> protected $attr<span class="token1">=</span><span class="token4">array</span><span class="token3">(</span> <span class="token">//连接超时时间,redis配置文件中默认为300秒</span> <span class="token2">'timeout'</span><span class="token1">=</span><span class="token1">></span><span class="token6">30</span><span class="token3">,</span> <span class="token">//选择的数据库。</span> <span class="token2">'db_id'</span><span class="token1">=</span><span class="token1">></span><span class="token6">0</span><span class="token3">,</span> <span class="token3">)</span><span class="token3">;</span> <span class="token">//什么时候重新建立连接</span> protected $expireTime<span class="token3">;</span> protected $host<span class="token3">;</span> protected $port<span class="token3">;</span> private <span class="token5">function</span> <span class="token4">__construct</span><span class="token3">(</span>$config<span class="token3">,</span>$attr<span class="token1">=</span><span class="token4">array</span><span class="token3">(</span><span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> $this<span class="token1">-</span><span class="token1">></span>attr <span class="token1">=</span> <span class="token4">array_merge</span><span class="token3">(</span>$this<span class="token1">-</span><span class="token1">></span>attr<span class="token3">,</span>$attr<span class="token3">)</span><span class="token3">;</span> $this<span class="token1">-</span><span class="token1">></span>redis <span class="token1">=</span> <span class="token5">new</span> <span class="token4">Redis</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $this<span class="token1">-</span><span class="token1">></span>port <span class="token1">=</span> $config<span class="token3">[</span><span class="token2">'port'</span><span class="token3">]</span> <span class="token1">?</span> $config<span class="token3">[</span><span class="token2">'port'</span><span class="token3">]</span> <span class="token3">:</span> <span class="token6">6379</span><span class="token3">;</span> $this<span class="token1">-</span><span class="token1">></span>host <span class="token1">=</span> $config<span class="token3">[</span><span class="token2">'host'</span><span class="token3">]</span><span class="token3">;</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">connect</span><span class="token3">(</span>$this<span class="token1">-</span><span class="token1">></span>host<span class="token3">,</span> $this<span class="token1">-</span><span class="token1">></span>port<span class="token3">,</span> $this<span class="token1">-</span><span class="token1">></span>attr<span class="token3">[</span><span class="token2">'timeout'</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> <span class="token5">if</span><span class="token3">(</span>$config<span class="token3">[</span><span class="token2">'auth'</span><span class="token3">]</span><span class="token3">)</span> <span class="token3">{</span> $this<span class="token1">-</span><span class="token1">></span><span class="token4">auth</span><span class="token3">(</span>$config<span class="token3">[</span><span class="token2">'auth'</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $this<span class="token1">-</span><span class="token1">></span>auth <span class="token1">=</span> $config<span class="token3">[</span><span class="token2">'auth'</span><span class="token3">]</span><span class="token3">;</span> <span class="token3">}</span> $this<span class="token1">-</span><span class="token1">></span>expireTime <span class="token1">=</span> <span class="token4">time</span><span class="token3">(</span><span class="token3">)</span> <span class="token1">+</span> $this<span class="token1">-</span><span class="token1">></span>attr<span class="token3">[</span><span class="token2">'timeout'</span><span class="token3">]</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 得到实例化的对象. * 为每个数据库建立一个连接 * 如果连接超时,将会重新建立一个连接 * @param array $config * @param int $dbId * @return \iphp\db\Redis */</span> public static <span class="token5">function</span> <span class="token4">getInstance</span><span class="token3">(</span>$config<span class="token3">,</span> $attr <span class="token1">=</span> <span class="token4">array</span><span class="token3">(</span><span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> <span class="token">//如果是一个字符串,将其认为是数据库的ID号。以简化写法。</span> <span class="token5">if</span><span class="token3">(</span><span class="token1">!</span><span class="token4">is_array</span><span class="token3">(</span>$attr<span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> $dbId <span class="token1">=</span> $attr<span class="token3">;</span> $attr <span class="token1">=</span> <span class="token4">array</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span> <span class="token1">=</span> $dbId<span class="token3">;</span> <span class="token3">}</span> $attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span> <span class="token1">=</span> $attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span> <span class="token1">?</span> $attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span> <span class="token3">:</span> <span class="token6">0</span><span class="token3">;</span> $k <span class="token1">=</span> <span class="token4">md5</span><span class="token3">(</span><span class="token4">implode</span><span class="token3">(</span><span class="token2">''</span><span class="token3">,</span> $config<span class="token3">)</span><span class="token3">.</span>$attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> <span class="token5">if</span><span class="token3">(</span><span class="token1">!</span> <span class="token3">(</span>static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span> <span class="token5">instanceof</span> <span class="token4">self</span><span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span> <span class="token1">=</span> <span class="token5">new</span> <span class="token4">self</span><span class="token3">(</span>$config<span class="token3">,</span>$attr<span class="token3">)</span><span class="token3">;</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token1">-</span><span class="token1">></span>k <span class="token1">=</span> $k<span class="token3">;</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token1">-</span><span class="token1">></span>dbId <span class="token1">=</span> $attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span><span class="token3">;</span> <span class="token">//如果不是0号库,选择一下数据库。</span> <span class="token5">if</span><span class="token3">(</span>$attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span> <span class="token1">!=</span> <span class="token6">0</span><span class="token3">)</span><span class="token3">{</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token1">-</span><span class="token1">></span><span class="token4">select</span><span class="token3">(</span>$attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token4">elseif</span><span class="token3">(</span> <span class="token4">time</span><span class="token3">(</span><span class="token3">)</span> <span class="token1">></span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token1">-</span><span class="token1">></span>expireTime<span class="token3">)</span> <span class="token3">{</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token1">-</span><span class="token1">></span><span class="token4">close</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span> <span class="token1">=</span> <span class="token5">new</span> <span class="token4">self</span><span class="token3">(</span>$config<span class="token3">,</span>$attr<span class="token3">)</span><span class="token3">;</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token1">-</span><span class="token1">></span>k <span class="token1">=</span> $k<span class="token3">;</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token1">-</span><span class="token1">></span>dbId<span class="token1">=</span> $attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span><span class="token3">;</span> <span class="token">//如果不是0号库,选择一下数据库。</span> <span class="token5">if</span><span class="token3">(</span>$attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span><span class="token1">!=</span><span class="token6">0</span><span class="token3">)</span><span class="token3">{</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token1">-</span><span class="token1">></span><span class="token4">select</span><span class="token3">(</span>$attr<span class="token3">[</span><span class="token2">'db_id'</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token5">return</span> static<span class="token3">:</span><span class="token3">:</span>$_instance<span class="token3">[</span>$k<span class="token3">]</span><span class="token3">;</span> <span class="token3">}</span> private <span class="token5">function</span> <span class="token4">__clone</span><span class="token3">(</span><span class="token3">)</span><span class="token3">{</span><span class="token3">}</span> <span class="token">/** * 执行原生的redis操作 * @return \Redis */</span> public <span class="token5">function</span> <span class="token4">getRedis</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token3">;</span> <span class="token3">}</span> <span class="token">/*****************hash表操作函数*******************/</span> <span class="token">/** * 得到hash表中一个字段的值 * @param string $key 缓存key * @param string $field 字段 * @return string|false */</span> public <span class="token5">function</span> <span class="token4">hGet</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hGet</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 为hash表设定一个字段的值 * @param string $key 缓存key * @param string $field 字段 * @param string $value 值。 * @return bool */</span> public <span class="token5">function</span> <span class="token4">hSet</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hSet</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 判断hash表中,指定field是不是存在 * @param string $key 缓存key * @param string $field 字段 * @return bool */</span> public <span class="token5">function</span> <span class="token4">hExists</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hExists</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 删除hash表中指定字段 ,支持批量删除 * @param string $key 缓存key * @param string $field 字段 * @return int */</span> public <span class="token5">function</span> <span class="token4">hdel</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">)</span> <span class="token3">{</span> $fieldArr<span class="token1">=</span><span class="token4">explode</span><span class="token3">(</span><span class="token2">','</span><span class="token3">,</span>$field<span class="token3">)</span><span class="token3">;</span> $delNum<span class="token1">=</span><span class="token6">0</span><span class="token3">;</span> <span class="token4">foreach</span><span class="token3">(</span>$fieldArr as $row<span class="token3">)</span> <span class="token3">{</span> $row<span class="token1">=</span><span class="token4">trim</span><span class="token3">(</span>$row<span class="token3">)</span><span class="token3">;</span> $delNum<span class="token1">+</span><span class="token1">=</span>$this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hDel</span><span class="token3">(</span>$key<span class="token3">,</span>$row<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token5">return</span> $delNum<span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回hash表元素个数 * @param string $key 缓存key * @return int|bool */</span> public <span class="token5">function</span> <span class="token4">hLen</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hLen</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 为hash表设定一个字段的值,如果字段存在,返回false * @param string $key 缓存key * @param string $field 字段 * @param string $value 值。 * @return bool */</span> public <span class="token5">function</span> <span class="token4">hSetNx</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hSetNx</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 为hash表多个字段设定值。 * @param string $key * @param array $value * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">hMset</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">if</span><span class="token3">(</span><span class="token1">!</span><span class="token4">is_array</span><span class="token3">(</span>$value<span class="token3">)</span><span class="token3">)</span> <span class="token5">return</span> <span class="token6">false</span><span class="token3">;</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hMset</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 为hash表多个字段设定值。 * @param string $key * @param array|string $value string以','号分隔字段 * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">hMget</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">)</span> <span class="token3">{</span> <span class="token5">if</span><span class="token3">(</span><span class="token1">!</span><span class="token4">is_array</span><span class="token3">(</span>$field<span class="token3">)</span><span class="token3">)</span> $field<span class="token1">=</span><span class="token4">explode</span><span class="token3">(</span><span class="token2">','</span><span class="token3">,</span> $field<span class="token3">)</span><span class="token3">;</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hMget</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 为hash表设这累加,可以负数 * @param string $key * @param int $field * @param string $value * @return bool */</span> public <span class="token5">function</span> <span class="token4">hIncrBy</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> $value<span class="token1">=</span><span class="token4">intval</span><span class="token3">(</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hIncrBy</span><span class="token3">(</span>$key<span class="token3">,</span>$field<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回所有hash表的所有字段 * @param string $key * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">hKeys</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hKeys</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回所有hash表的字段值,为一个索引数组 * @param string $key * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">hVals</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hVals</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回所有hash表的字段值,为一个关联数组 * @param string $key * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">hGetAll</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">hGetAll</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/*********************有序集合操作*********************/</span> <span class="token">/** * 给当前集合添加一个元素 * 如果value已经存在,会更新order的值。 * @param string $key * @param string $order 序号 * @param string $value 值 * @return bool */</span> public <span class="token5">function</span> <span class="token4">zAdd</span><span class="token3">(</span>$key<span class="token3">,</span>$order<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zAdd</span><span class="token3">(</span>$key<span class="token3">,</span>$order<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 给$value成员的order值,增加$num,可以为负数 * @param string $key * @param string $num 序号 * @param string $value 值 * @return 返回新的order */</span> public <span class="token5">function</span> <span class="token4">zinCry</span><span class="token3">(</span>$key<span class="token3">,</span>$num<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zinCry</span><span class="token3">(</span>$key<span class="token3">,</span>$num<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 删除值为value的元素 * @param string $key * @param stirng $value * @return bool */</span> public <span class="token5">function</span> <span class="token4">zRem</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zRem</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 集合以order递增排列后,0表示第一个元素,-1表示最后一个元素 * @param string $key * @param int $start * @param int $end * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">zRange</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zRange</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 集合以order递减排列后,0表示第一个元素,-1表示最后一个元素 * @param string $key * @param int $start * @param int $end * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">zRevRange</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zRevRange</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 集合以order递增排列后,返回指定order之间的元素。 * min和max可以是-inf和+inf 表示最大值,最小值 * @param string $key * @param int $start * @param int $end * @package array $option 参数 * withscores=>true,表示数组下标为Order值,默认返回索引数组 * limit=>array(0,1) 表示从0开始,取一条记录。 * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">zRangeByScore</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token1">=</span><span class="token2">'-inf'</span><span class="token3">,</span>$end<span class="token1">=</span><span class="token2">"+inf"</span><span class="token3">,</span>$option<span class="token1">=</span><span class="token4">array</span><span class="token3">(</span><span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zRangeByScore</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">,</span>$option<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 集合以order递减排列后,返回指定order之间的元素。 * min和max可以是-inf和+inf 表示最大值,最小值 * @param string $key * @param int $start * @param int $end * @package array $option 参数 * withscores=>true,表示数组下标为Order值,默认返回索引数组 * limit=>array(0,1) 表示从0开始,取一条记录。 * @return array|bool */</span> public <span class="token5">function</span> <span class="token4">zRevRangeByScore</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token1">=</span><span class="token2">'-inf'</span><span class="token3">,</span>$end<span class="token1">=</span><span class="token2">"+inf"</span><span class="token3">,</span>$option<span class="token1">=</span><span class="token4">array</span><span class="token3">(</span><span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zRevRangeByScore</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">,</span>$option<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回order值在start end之间的数量 * @param unknown $key * @param unknown $start * @param unknown $end */</span> public <span class="token5">function</span> <span class="token4">zCount</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zCount</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回值为value的order值 * @param unknown $key * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">zScore</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zScore</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回集合以score递增加排序后,指定成员的排序号,从0开始。 * @param unknown $key * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">zRank</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zRank</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回集合以score递增加排序后,指定成员的排序号,从0开始。 * @param unknown $key * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">zRevRank</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zRevRank</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 删除集合中,score值在start end之间的元素 包括start end * min和max可以是-inf和+inf 表示最大值,最小值 * @param unknown $key * @param unknown $start * @param unknown $end * @return 删除成员的数量。 */</span> public <span class="token5">function</span> <span class="token4">zRemRangeByScore</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zRemRangeByScore</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回集合元素个数。 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">zCard</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">zCard</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/*********************队列操作命令************************/</span> <span class="token">/** * 在队列尾部插入一个元素 * @param unknown $key * @param unknown $value * 返回队列长度 */</span> public <span class="token5">function</span> <span class="token4">rPush</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">rPush</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 在队列尾部插入一个元素 如果key不存在,什么也不做 * @param unknown $key * @param unknown $value * 返回队列长度 */</span> public <span class="token5">function</span> <span class="token4">rPushx</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">rPushx</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 在队列头部插入一个元素 * @param unknown $key * @param unknown $value * 返回队列长度 */</span> public <span class="token5">function</span> <span class="token4">lPush</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lPush</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 在队列头插入一个元素 如果key不存在,什么也不做 * @param unknown $key * @param unknown $value * 返回队列长度 */</span> public <span class="token5">function</span> <span class="token4">lPushx</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lPushx</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回队列长度 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">lLen</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lLen</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回队列指定区间的元素 * @param unknown $key * @param unknown $start * @param unknown $end */</span> public <span class="token5">function</span> <span class="token4">lRange</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lrange</span><span class="token3">(</span>$key<span class="token3">,</span>$start<span class="token3">,</span>$end<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回队列中指定索引的元素 * @param unknown $key * @param unknown $index */</span> public <span class="token5">function</span> <span class="token4">lIndex</span><span class="token3">(</span>$key<span class="token3">,</span>$index<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lIndex</span><span class="token3">(</span>$key<span class="token3">,</span>$index<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 设定队列中指定index的值。 * @param unknown $key * @param unknown $index * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">lSet</span><span class="token3">(</span>$key<span class="token3">,</span>$index<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lSet</span><span class="token3">(</span>$key<span class="token3">,</span>$index<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 删除值为vaule的count个元素 * PHP-REDIS扩展的数据顺序与命令的顺序不太一样,不知道是不是bug * count>0 从尾部开始 * >0 从头部开始 * =0 删除全部 * @param unknown $key * @param unknown $count * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">lRem</span><span class="token3">(</span>$key<span class="token3">,</span>$count<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lRem</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">,</span>$count<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 删除并返回队列中的头元素。 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">lPop</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lPop</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 删除并返回队列中的尾元素 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">rPop</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">rPop</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/*************redis字符串操作命令*****************/</span> <span class="token">/** * 设置一个key * @param unknown $key * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">set</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">set</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 得到一个key * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">get</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">get</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 设置一个有过期时间的key * @param unknown $key * @param unknown $expire * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">setex</span><span class="token3">(</span>$key<span class="token3">,</span>$expire<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">setex</span><span class="token3">(</span>$key<span class="token3">,</span>$expire<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 设置一个key,如果key存在,不做任何操作. * @param unknown $key * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">setnx</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">setnx</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 批量设置key * @param unknown $arr */</span> public <span class="token5">function</span> <span class="token4">mset</span><span class="token3">(</span>$arr<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">mset</span><span class="token3">(</span>$arr<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/*************redis 无序集合操作命令*****************/</span> <span class="token">/** * 返回集合中所有元素 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">sMembers</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">sMembers</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 求2个集合的差集 * @param unknown $key1 * @param unknown $key2 */</span> public <span class="token5">function</span> <span class="token4">sDiff</span><span class="token3">(</span>$key1<span class="token3">,</span>$key2<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">sDiff</span><span class="token3">(</span>$key1<span class="token3">,</span>$key2<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 添加集合。由于版本问题,扩展不支持批量添加。这里做了封装 * @param unknown $key * @param string|array $value */</span> public <span class="token5">function</span> <span class="token4">sAdd</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">if</span><span class="token3">(</span><span class="token1">!</span><span class="token4">is_array</span><span class="token3">(</span>$value<span class="token3">)</span><span class="token3">)</span> $arr<span class="token1">=</span><span class="token4">array</span><span class="token3">(</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token5">else</span> $arr<span class="token1">=</span>$value<span class="token3">;</span> <span class="token4">foreach</span><span class="token3">(</span>$arr as $row<span class="token3">)</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">sAdd</span><span class="token3">(</span>$key<span class="token3">,</span>$row<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回无序集合的元素个数 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">scard</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">scard</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 从集合中删除一个元素 * @param unknown $key * @param unknown $value */</span> public <span class="token5">function</span> <span class="token4">srem</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">srem</span><span class="token3">(</span>$key<span class="token3">,</span>$value<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/*************redis管理操作命令*****************/</span> <span class="token">/** * 选择数据库 * @param int $dbId 数据库ID号 * @return bool */</span> public <span class="token5">function</span> <span class="token4">select</span><span class="token3">(</span>$dbId<span class="token3">)</span> <span class="token3">{</span> $this<span class="token1">-</span><span class="token1">></span>dbId<span class="token1">=</span>$dbId<span class="token3">;</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">select</span><span class="token3">(</span>$dbId<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 清空当前数据库 * @return bool */</span> public <span class="token5">function</span> <span class="token4">flushDB</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">flushDB</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回当前库状态 * @return array */</span> public <span class="token5">function</span> <span class="token4">info</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">info</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 同步保存数据到磁盘 */</span> public <span class="token5">function</span> <span class="token4">save</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">save</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 异步保存数据到磁盘 */</span> public <span class="token5">function</span> <span class="token4">bgSave</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">bgSave</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回最后保存到磁盘的时间 */</span> public <span class="token5">function</span> <span class="token4">lastSave</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">lastSave</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回key,支持*多个字符,?一个字符 * 只有* 表示全部 * @param string $key * @return array */</span> public <span class="token5">function</span> <span class="token4">keys</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">keys</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 删除指定key * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">del</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">del</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 判断一个key值是不是存在 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">exists</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">exists</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 为一个key设定过期时间 单位为秒 * @param unknown $key * @param unknown $expire */</span> public <span class="token5">function</span> <span class="token4">expire</span><span class="token3">(</span>$key<span class="token3">,</span>$expire<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">expire</span><span class="token3">(</span>$key<span class="token3">,</span>$expire<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回一个key还有多久过期,单位秒 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">ttl</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">ttl</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 设定一个key什么时候过期,time为一个时间戳 * @param unknown $key * @param unknown $time */</span> public <span class="token5">function</span> <span class="token4">exprieAt</span><span class="token3">(</span>$key<span class="token3">,</span>$time<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">expireAt</span><span class="token3">(</span>$key<span class="token3">,</span>$time<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 关闭服务器链接 */</span> public <span class="token5">function</span> <span class="token4">close</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">close</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 关闭所有连接 */</span> public static <span class="token5">function</span> <span class="token4">closeAll</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token4">foreach</span><span class="token3">(</span>static<span class="token3">:</span><span class="token3">:</span>$_instance as $o<span class="token3">)</span> <span class="token3">{</span> <span class="token5">if</span><span class="token3">(</span>$o <span class="token5">instanceof</span> <span class="token4">self</span><span class="token3">)</span> $o<span class="token1">-</span><span class="token1">></span><span class="token4">close</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token">/** 这里不关闭连接,因为session写入会在所有对象销毁之后。 public function __destruct() { return $this->redis->close(); } **/</span> <span class="token">/** * 返回当前数据库key数量 */</span> public <span class="token5">function</span> <span class="token4">dbSize</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">dbSize</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回一个随机key */</span> public <span class="token5">function</span> <span class="token4">randomKey</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">randomKey</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 得到当前数据库ID * @return int */</span> public <span class="token5">function</span> <span class="token4">getDbId</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>dbId<span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 返回当前密码 */</span> public <span class="token5">function</span> <span class="token4">getAuth</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>auth<span class="token3">;</span> <span class="token3">}</span> public <span class="token5">function</span> <span class="token4">getHost</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>host<span class="token3">;</span> <span class="token3">}</span> public <span class="token5">function</span> <span class="token4">getPort</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>port<span class="token3">;</span> <span class="token3">}</span> public <span class="token5">function</span> <span class="token4">getConnInfo</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> <span class="token4">array</span><span class="token3">(</span> <span class="token2">'host'</span><span class="token1">=</span><span class="token1">></span>$this<span class="token1">-</span><span class="token1">></span>host<span class="token3">,</span> <span class="token2">'port'</span><span class="token1">=</span><span class="token1">></span>$this<span class="token1">-</span><span class="token1">></span>port<span class="token3">,</span> <span class="token2">'auth'</span><span class="token1">=</span><span class="token1">></span>$this<span class="token1">-</span><span class="token1">></span>auth <span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/*********************事务的相关方法************************/</span> <span class="token">/** * 监控key,就是一个或多个key添加一个乐观锁 * 在此期间如果key的值如果发生的改变,刚不能为key设定值 * 可以重新取得Key的值。 * @param unknown $key */</span> public <span class="token5">function</span> <span class="token4">watch</span><span class="token3">(</span>$key<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">watch</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 取消当前链接对所有key的watch * EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了 */</span> public <span class="token5">function</span> <span class="token4">unwatch</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">unwatch</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 开启一个事务 * 事务的调用有两种模式Redis::MULTI和Redis::PIPELINE, * 默认是Redis::MULTI模式, * Redis::PIPELINE管道模式速度更快,但没有任何保证原子性有可能造成数据的丢失 */</span> public <span class="token5">function</span> <span class="token4">multi</span><span class="token3">(</span>$type<span class="token1">=</span>\Redis<span class="token3">:</span><span class="token3">:</span>MULTI<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">multi</span><span class="token3">(</span>$type<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 执行一个事务 * 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行 */</span> public <span class="token5">function</span> <span class="token4">exec</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">exec</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 回滚一个事务 */</span> public <span class="token5">function</span> <span class="token4">discard</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">discard</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 测试当前链接是不是已经失效 * 没有失效返回+PONG * 失效返回false */</span> public <span class="token5">function</span> <span class="token4">ping</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">ping</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> public <span class="token5">function</span> <span class="token4">auth</span><span class="token3">(</span>$auth<span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>redis<span class="token1">-</span><span class="token1">></span><span class="token4">auth</span><span class="token3">(</span>$auth<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">/*********************自定义的方法,用于简化操作************************/</span> <span class="token">/** * 得到一组的ID号 * @param unknown $prefix * @param unknown $ids */</span> public <span class="token5">function</span> <span class="token4">hashAll</span><span class="token3">(</span>$prefix<span class="token3">,</span>$ids<span class="token3">)</span> <span class="token3">{</span> <span class="token5">if</span><span class="token3">(</span>$ids<span class="token1">==</span><span class="token6">false</span><span class="token3">)</span> <span class="token5">return</span> <span class="token6">false</span><span class="token3">;</span> <span class="token5">if</span><span class="token3">(</span><span class="token4">is_string</span><span class="token3">(</span>$ids<span class="token3">)</span><span class="token3">)</span> $ids<span class="token1">=</span><span class="token4">explode</span><span class="token3">(</span><span class="token2">','</span><span class="token3">,</span> $ids<span class="token3">)</span><span class="token3">;</span> $arr<span class="token1">=</span><span class="token4">array</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token4">foreach</span><span class="token3">(</span>$ids as $id<span class="token3">)</span> <span class="token3">{</span> $key<span class="token1">=</span>$prefix<span class="token3">.</span><span class="token2">'.'</span><span class="token3">.</span>$id<span class="token3">;</span> $res<span class="token1">=</span>$this<span class="token1">-</span><span class="token1">></span><span class="token4">hGetAll</span><span class="token3">(</span>$key<span class="token3">)</span><span class="token3">;</span> <span class="token5">if</span><span class="token3">(</span>$res<span class="token1">!=</span><span class="token6">false</span><span class="token3">)</span> $arr<span class="token3">[</span><span class="token3">]</span><span class="token1">=</span>$res<span class="token3">;</span> <span class="token3">}</span> <span class="token5">return</span> $arr<span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 生成一条消息,放在redis数据库中。使用0号库。 * @param string|array $msg */</span> public <span class="token5">function</span> <span class="token4">pushMessage</span><span class="token3">(</span>$lkey<span class="token3">,</span>$msg<span class="token3">)</span> <span class="token3">{</span> <span class="token5">if</span><span class="token3">(</span><span class="token4">is_array</span><span class="token3">(</span>$msg<span class="token3">)</span><span class="token3">)</span><span class="token3">{</span> $msg <span class="token1">=</span> <span class="token4">json_encode</span><span class="token3">(</span>$msg<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> $key <span class="token1">=</span> <span class="token4">md5</span><span class="token3">(</span>$msg<span class="token3">)</span><span class="token3">;</span> <span class="token">//如果消息已经存在,删除旧消息,已当前消息为准</span> <span class="token">//echo $n=$this->lRem($lkey, 0, $key)."\n";</span> <span class="token">//重新设置新消息</span> $this<span class="token1">-</span><span class="token1">></span><span class="token4">lPush</span><span class="token3">(</span>$lkey<span class="token3">,</span> $key<span class="token3">)</span><span class="token3">;</span> $this<span class="token1">-</span><span class="token1">></span><span class="token4">setex</span><span class="token3">(</span>$key<span class="token3">,</span> <span class="token6">3600</span><span class="token3">,</span> $msg<span class="token3">)</span><span class="token3">;</span> <span class="token5">return</span> $key<span class="token3">;</span> <span class="token3">}</span> <span class="token">/** * 得到条批量删除key的命令 * @param unknown $keys * @param unknown $dbId */</span> public <span class="token5">function</span> <span class="token4">delKeys</span><span class="token3">(</span>$keys<span class="token3">,</span>$dbId<span class="token3">)</span> <span class="token3">{</span> $redisInfo<span class="token1">=</span>$this<span class="token1">-</span><span class="token1">></span><span class="token4">getConnInfo</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $cmdArr<span class="token1">=</span><span class="token4">array</span><span class="token3">(</span> <span class="token2">'redis-cli'</span><span class="token3">,</span> <span class="token2">'-a'</span><span class="token3">,</span> $redisInfo<span class="token3">[</span><span class="token2">'auth'</span><span class="token3">]</span><span class="token3">,</span> <span class="token2">'-h'</span><span class="token3">,</span> $redisInfo<span class="token3">[</span><span class="token2">'host'</span><span class="token3">]</span><span class="token3">,</span> <span class="token2">'-p'</span><span class="token3">,</span> $redisInfo<span class="token3">[</span><span class="token2">'port'</span><span class="token3">]</span><span class="token3">,</span> <span class="token2">'-n'</span><span class="token3">,</span> $dbId<span class="token3">,</span> <span class="token3">)</span><span class="token3">;</span> $redisStr<span class="token1">=</span><span class="token4">implode</span><span class="token3">(</span><span class="token2">' '</span><span class="token3">,</span> $cmdArr<span class="token3">)</span><span class="token3">;</span> $cmd<span class="token1">=</span><span class="token2">"{$redisStr} KEYS \"{$keys}\" | xargs {$redisStr} del"</span><span class="token3">;</span> <span class="token5">return</span> $cmd<span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> ``` ```