PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案

PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案 PHP使用Redis实战实录系列PHP使用Redis实战实录1宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案PHP使用Redis实战实录2Redis扩展方法和PHP连接Redis的多种方案Redis扩展方法和PHP连接Redis的多种方案一、Redis扩展方法二、php操作Redis语法三、PHP连接Redis1.PHP中使用带密码的连接Redis2.PHP连接Redis抛出异常3.PHP连接Redis$redis-ping()4.PHP连接Redis 条件语句写法四、避坑指南NOAUTH Authentication required 错误PHP 中使用 Redis 前 我们需要确保已经安装了 redis 服务及 PHP redis 驱动且你的机器上能正常使用 PHP:echo phpinfo();出现上面提示代表可以正常使用PHP操作Redis。一、Redis扩展方法Redis扩展提供了一系列方法用于与Redis服务器进行交互。以下是一些常用的$redis对象可用的方法连接和关闭连接connect($host, $port, $timeout): 连接到Redis服务器。close(): 关闭Redis连接。数据操作set($key, $value): 设置指定键的值。get($key): 获取指定键的值。del($key1, $key2, ...): 删除一个或多个键。incr($key): 增加键对应的值。decr($key): 减少键对应的值。exists($key): 检查键是否存在。其他诸如append、strlen、mset、mget等等。列表操作lpush($key, $value1, $value2, ...): 在列表左侧插入一个或多个值。rpush($key, $value1, $value2, ...): 在列表右侧插入一个或多个值。lpop($key): 弹出列表左侧的值。rpop($key): 弹出列表右侧的值。llen($key): 获取列表长度。其他诸如lindex、lrange、ltrim等等。哈希操作hset($key, $field, $value): 设置哈希中指定字段的值。hget($key, $field): 获取哈希中指定字段的值。hdel($key, $field1, $field2, ...): 删除一个或多个哈希字段。hgetall($key): 获取哈希中所有字段和对应的值。其他诸如hincrby、hkeys、hvals等等。集合操作sadd($key, $member1, $member2, ...): 向集合添加一个或多个成员。srem($key, $member1, $member2, ...): 从集合中移除一个或多个成员。smembers($key): 获取集合的所有成员。sismember($key, $member): 检查成员是否存在于集合中。其他诸如sinter、sunion、sdiff等等。这只是Redis提供的一些常见操作方法的示例列表还有更多其他方法可供使用。具体可以参考Redis扩展的文档或官方网站来了解更多关于Redis操作的详细信息。二、php操作Redis语法在PHP中可以使用Redis扩展来操作Redis服务器。下面是一些常用的PHP操作Redis的语法示例连接到Redis服务器$redis new Redis();$redis-connect(‘127.0.0.1’, 6379);// 或者使用连接池连接$redis new Redis();$redis-pconnect(‘127.0.0.1’, 6379);设置和获取键值对// 设置键的值$redis-set(‘key’, ‘value’);// 获取键的值$value $redis-get(‘key’);删除键$redis-del(‘key’);判断键是否存在if ($redis-exists(‘key’)) {// 键存在的处理逻辑} else {// 键不存在的处理逻辑}进行哈希操作// 设置哈希表字段的值$redis-hset(‘hash_key’, ‘field’, ‘value’);// 获取哈希表字段的值$value $redis-hget(‘hash_key’, ‘field’);// 删除哈希表字段$redis-hdel(‘hash_key’, ‘field’);进行列表操作// 在列表左侧插入值$redis-lpush(‘list_key’, ‘value1’, ‘value2’);// 在列表右侧插入值$redis-rpush(‘list_key’, ‘value3’, ‘value4’);// 弹出列表左侧的值$value $redis-lpop(‘list_key’);// 弹出列表右侧的值$value $redis-rpop(‘list_key’);进行集合操作// 向集合添加成员$redis-sadd(‘set_key’, ‘member1’, ‘member2’);// 从集合中移除成员$redis-srem(‘set_key’, ‘member1’);// 检查成员是否存在于集合中if ($redis-sismember(‘set_key’, ‘member1’)) {// 成员存在的处理逻辑} else {// 成员不存在的处理逻辑}键设置过期时间在Redis中你可以使用EXPIRE命令为一个键设置过期时间从而控制该键的有效期。以下是一些在Redis中设置键的有效期的方法EXPIRE key seconds设置key的过期时间为seconds秒。当seconds秒钟过去后键将会自动过期并被删除。例如下面的代码将名为mykey的键设置为过期时间为60秒$redis-expire(mykey, 60);PEXPIRE key milliseconds类似于EXPIRE命令但时间以毫秒为单位。例如下面的代码将名为mykey的键设置为过期时间为3000毫秒即3秒$redis-pexpire(mykey, 3000);EXPIREAT key timestamp设置key的过期时间戳以秒为单位。timestamp参数是一个UNIX时间戳表示键的过期时间点。例如下面的代码将名为mykey的键设置为在1612266625秒之后过期$redis-expireat(mykey, 1612266625);PEXPIREAT key milliseconds-timestamp类似于EXPIREAT命令但时间戳以毫秒为单位。例如下面的代码将名为mykey的键设置为在1654123456789毫秒之后过期$redis-pexpireat(mykey, 1654123456789);这些命令可用于设置Redis中键的过期时间。一旦过期时间到达键将被自动删除。注意只有在键被设置为字符串、哈希表、列表等类型时过期设置才有效。另外如果你想获取键的剩余过期时间你可以使用TTL命令或PTTL命令。如ttl(mykey)返回键mykey的剩余过期时间以秒为单位pttl(mykey)返回键mykey的剩余过期时间以毫秒为单位。如果键已过期或不存在这些命令返回负数。这些是一些常用的Redis操作示例你可以根据具体的业务需求使用相应的方法来进行操作。记得在操作完成后及时关闭Redis连接以释放资源。三、PHP连接Redis1.PHP中使用带密码的连接Redis若要在PHP中使用带密码的连接Redis你可以使用Redis扩展的auth方法进行身份验证。以下是设置密码并连接到Redis服务器的示例代码?php $redis new Redis(); // 连接到Redis服务器 $redis-connect(127.0.0.1, 6379); // 身份验证 $redis-auth(your_password); // 执行一些操作 $redis-set(key, value); $value $redis-get(key); echo $value; // 输出 value ?在上述代码中your_password是在Redis服务器上设置的密码。使用auth方法将密码传递给Redis实例进行身份验证。如果密码不正确或与服务器配置不匹配将会引发REDIS_AUTH异常。因此确保提供正确的密码以及与服务器配置相匹配的密码。同样地如果在使用Laravel框架你可以在config/database.php文件中配置Redis连接的密码。在对应的redis配置数组中添加password your_password以设置密码。记得使用适当的安全措施来保护Redis密码如避免将密码明文存储在代码中或通过不安全的方式传输密码。2.PHP连接Redis抛出异常try { $redis new Redis(); // 连接到Redis服务器 $redis-connect(127.0.0.1, 6379); // 身份验证 $redis-auth(kYABzc8u3zNs7cq); // 执行一些操作 $redis-set(key, lockdata); $value $redis-get(key); echo $value; // 输出 value // 关闭Redis连接 $redis-close(); } catch (RedisException $e) { echo 连接Redis时发生异常 . $e-getMessage(); }3.PHP连接Redis$redis-ping()$redis-ping()是Redis扩展提供的一个方法用于检测与Redis服务器的连接是否存活。它的使用很简单只需要调用$redis-ping()方法即可。若连接正常且服务器可响应则该方法返回字符串PONG。若连接异常或服务器未响应则会抛出RedisException异常。以下是一个示例$redis new Redis(); $redis-connect(127.0.0.1, 6379); try { $response $redis-ping(); if ($response PONG) { echo Redis连接正常; } else { echo Redis连接异常或服务器未响应; } } catch (RedisException $e) { echo Redis连接异常 . $e-getMessage(); } $redis-close();在上述示例中我们首先创建一个Redis对象然后使用connect()方法连接到Redis服务器。接下来我们调用ping()方法来检测连接状态并通过返回的响应值进行判断。如果返回值为PONG则表示连接正常如果返回值为其他内容或抛出了异常则表示连接异常或服务器未响应。记得在使用ping()方法前确保已经成功建立了与Redis服务器的连接并在使用完成后及时关闭连接以释放资源。4.PHP连接Redis 条件语句写法如果你不想使用try语句来捕获异常你可以通过检查连接和操作返回的结果来判断是否发生了异常。以下是一个示例代码$redis new Redis(); // 连接到Redis服务器 $connected $redis-connect(127.0.0.1, 6379); if ($connected false) { echo 无法连接到Redis服务器; } else { // 执行一些操作 $setResult $redis-set(key, value); if ($setResult false) { echo 设置键值对发生了异常; } else { $value $redis-get(key); if ($value false) { echo 获取键值对发生了异常; } else { echo $value; // 输出 value } } // 关闭Redis连接 $redis-close(); }在上述示例中我们首先检查$redis-connect()方法的返回值来确定是否成功连接到Redis服务器。如果连接失败我们可以输出相应的错误信息。如果连接成功我们再执行一些操作如$redis-set()、$redis-get()等并检查每个操作的返回结果来判断是否发生了异常。使用这种写法你可以根据返回结果进行逻辑判断和处理而无需使用try和catch块来捕获异常。这种写法相对简单但在处理多个操作和嵌套逻辑时可能会导致代码变得复杂。记得在代码中适当处理连接和操作过程中的异常确保你的程序具备健壮性并能正确处理错误情况。四、避坑指南NOAUTH Authentication required 错误Fatal error: Uncaught exception ‘RedisException’ with message ‘NOAUTH Authentication required.’ in /www/wwwroot/redis.lockdata.cn/index.php:12 Stack trace: #0 /www/wwwroot/redis.lockdata.cn/index.php(12): Redis-set(‘key1’, ‘value1’) #1 {main} thrown in /www/wwwroot/redis.lockdata.cn/index.php on line 12**原因**未配置Redis密码导致。// 身份验证 $redis-auth(kYABzc8u3zNs7cq);漏刻有时