一个非常简单且安全的PHP库,提供在PHP应用程序中访问Redis缓存的函数。此库将AmPHP相关的Redis包封装起来,以异步和非阻塞的方式与Redis内存缓存交互。

1.0.3 2021-03-30 04:15 UTC

This package is auto-updated.

Last update: 2024-09-29 05:56:20 UTC


README

一个非常简单且安全的PHP库,提供在PHP应用程序中访问Redis缓存和Redis Pubsub(即Redis用作消息队列)的函数。此库将AmPHP相关的Redis包封装起来,以异步和非阻塞的方式与Redis内存缓存交互。

优势

  • 以异步和非阻塞的方式查询Redis缓存
  • 在交互Redis Pubsub时,处理单个频道以及频道模式的消息订阅、取消订阅操作,以及频道发布操作。

入门指南

使用Composer,运行

composer require invincible-tech-systems/easeampredis:^1.0.3

注意,vendor 文件夹和 vendor/autoload.php 脚本是由Composer生成的;它们不是EaseAmpRedis的一部分。

要包含库,

<?php
require 'vendor/autoload.php';

use InvincibleTechSystems\EaseAmpRedis\EaseAmpRedis;

由于Amphp/dns是此库的依赖之一,为了防止由于open_basedir限制、没有访问linux服务器上的/etc/resolv.conf文件等原因可能发生的递归DNS服务器解析错误,请将以下行包含在您的代码中,

use \InvincibleTechSystems\EaseAmpRedis\CustomAmphpDnsConfigLoader;

$customAmphpDnsConfigValues = ["208.67.222.222:53", "208.67.220.220:53","8.8.8.8:53","[2001:4860:4860::8888]:53"];

$CustomAmphpDnsConfigLoader = new CustomAmphpDnsConfigLoader($customAmphpDnsConfigValues, 5000, 3);

\Amp\Dns\resolver(new \Amp\Dns\Rfc1035StubResolver(null, $CustomAmphpDnsConfigLoader));

注意:如果应用程序中已加载类似的自定义DNS配置加载器,则无需包含上述内容,例如从EaseAmyMysql (https://github.com/invincible-tech-systems/easeamp-mysql) 或 EaseAmpMysqlRedis (https://github.com/invincible-tech-systems/easeamp-mysql-redis) 或 EaseAmpMysqlHalite (https://github.com/invincible-tech-systems/easeampmysql-halite) 等其他Amphp/dns依赖库加载,请忽略包含上述内容。

连接到Redis服务器,不使用密码

$redisHost = "tcp://10.124.0.3:6379";
$redisConnection = new EaseAmpRedis($redisHost);

连接到带密码的Redis服务器,其中下面将使用的密码是在redis.conf文件中通过requirepass指令定义的密码。

$redisHost = "tcp://:6379?password=mypassword";
$redisConnection = new EaseAmpRedis($redisHost);

注意:在带密码和不带密码的示例中,假设使用端口6379,因为这是Redis软件定义的默认端口。如果Redis托管在不同的端口上,则必须更改端口号。

定义命名空间前缀

$namespacePrefix = "My-First-App";

注意:请按需定义命名空间,以便唯一标识特定应用程序并适当分隔键。

检查Redis缓存中是否存在键

$existsCheckResult = $redisConnection->exists($namespacePrefix, 'foo');

exists方法期望两个参数,即redis键命名空间前缀和键后缀。'foo'是键后缀,如本例所示。在这种情况下,如果Redis键存在,则结果将作为布尔值(true)返回,否则,结果将作为布尔值(false)返回。

检查Redis缓存中键的类型

$typeCheckResult = $redisConnection->type($namespacePrefix, 'foo');

type方法期望两个参数,即redis键命名空间前缀和键后缀。'foo'是键后缀,如本例所示。在这种情况下,结果将是特定Redis键的值的数据类型。如果结果是有效的,它可以是在string、list、set、zset、hash等类型中,否则将返回'None'。

设置Redis缓存中键的过期时间

$result = $redisConnection->expire($namespacePrefix, 'foo',3000);

expire方法期望输入三个参数,分别构成Redis键命名空间前缀、Redis键后缀和键过期所需秒数(定义为毫秒)。例如,'foo'是键后缀,3000是毫秒定义。在此上下文中,操作成功的结果将是布尔值(true),否则结果将是布尔值(false)。

递增Redis缓存中键的值

$result = $redisConnection->incrBy($namespacePrefix, 'foo', 3);

可以使用incrBy方法,该方法接受三个参数作为输入,类似于Redis键命名空间前缀、Redis键后缀和要进行的增量操作的数字。如果键不存在,则在执行操作之前将其设置为0。

递减Redis缓存中键的值

$result = $redisConnection->decrBy($namespacePrefix, 'foo', 3);

可以使用decrBy方法,该方法接受三个参数作为输入,类似于Redis键命名空间前缀、Redis键后缀和要进行的递减操作的数字。如果键不存在,则在执行操作之前将其设置为0。

通过传递关联数组中的数据来设置单个或多个键及其值作为字符串

$result = $redisConnection->stringSet(['f33'=>'jai','h33'=>'ram']);

stringSet方法将键('f33','h33')的值设置为指定的字符串('jai','ram')。如果操作成功,则结果为true,否则结果为false。

将值推送到指定Redis键的列表中,从头部以数组形式,在Redis缓存中

$result = $redisConnection->listPush('H', $namespacePrefix, 'list100', ['a','b']);

注意:listPush方法返回推送到列表后的长度。

将值推送到指定Redis键的列表中,从尾部以数组形式,在Redis缓存中

$result = $redisConnection->listPush('T', $namespacePrefix, 'list100', ['c','d']);

注意:listPush方法返回推送到列表后的长度。

从Redis缓存中指定的Redis键的列表中移除值,从头部

$result = $redisConnection->listPop('H', $namespacePrefix, 'list100');

注意:listPop方法返回移除列表后的删除元素。

从Redis缓存中指定的Redis键的列表中移除值,从尾部

$result = $redisConnection->listPop('T', $namespacePrefix, 'list100');

注意:listPop方法返回移除列表后的删除元素。

在Redis缓存中存储在键中的哈希中设置指定的字段及其相应值

$result = $redisConnection->mapSet($namespacePrefix, 'map100', ['yoo'=>'1','moo'=>'2']);

此命令将覆盖哈希中已存在的任何指定字段。如果键不存在,则创建一个新的包含哈希的键。如果操作成功,则结果为true,否则结果为false。

从Redis缓存中获取Redis键的值

$result = $redisConnection->get($namespacePrefix, 'f33');

根据特定Redis键的数据类型,get方法通过内部使用适当的redis命令返回值

    if type of key is string, get method returns the value of the key as a string
                                      
    if type of key is list, get method returns the value of the key as a numeric index array
                                      
    if type of key is hash, get method returns the value of the key as an associative array

在Redis Pubsub上订阅一个频道

$result = $redisConnection->subscribe('hello');

可以通过在应用中使用subscribe方法来订阅一个频道。由于这是一个阻塞操作,建议扩展EaseAmpRedis类,然后在扩展类中的subscribe方法内编写相关业务逻辑的代码。

在Redis Pubsub上根据指定的模式订阅多个频道

$result = $redisConnection->pSubscribe('h?llo');

可以通过在应用中使用pSubscribe方法根据指定的模式('h?llo')来订阅一个或多个频道。例如:频道名称如'hello','htllo','hxllo'等。由于这是一个阻塞操作,建议扩展EaseAmpRedis类,然后在扩展类中的pSubscribe方法内编写相关业务逻辑的代码。

在Redis Pubsub上向频道发布消息

$result = $redisConnection->publish('koo','Hello');

publish方法将消息('Hello')发布到频道('koo')。如果消息成功发布到指定的频道,则所有已订阅该频道(即,WebSocket客户端)的用户将接收到该消息。

在Redis Pubsub上取消订阅特定频道

$result = $redisConnection->unSubscribe('koo');

unSubscribe方法取消用户对指定频道('koo')的订阅。如果结果是true,则用户将不会接收到之后发布到该频道的任何消息。

在Redis Pubsub上根据指定的模式取消订阅多个频道

$result = $redisConnection->pUnSubscribe('h?llo');

pUnSubscribe 方法用于将用户从所有基于指定模式('h?llo')的频道取消订阅。例如:频道名称如 'hello'、'htllo'、'hxllo' 等。如果结果为 true,则用户将不会收到发布到所有匹配该指定模式频道的任何消息。

贡献者

克里山维尼尼(krishnaveni.nimmala@invincibletechsystems.com

许可协议

本软件根据 MIT 许可协议分发。请阅读 LICENSE 了解软件的可获得性和分发信息。