PHP使用Redis实战实录系列
- PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案
- PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
Redis扩展方法和PHP连接Redis的多种方案
PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP:
echophpinfo();
出现上面提示,代表可以正常使用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=newRedis();$redis->connect('127.0.0.1',6379);// 或者使用连接池连接$redis=newRedis();$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连接Redis
1.PHP中使用带密码的连接Redis
若要在PHP中使用带密码的连接Redis,你可以使用Redis扩展的
auth
方法进行身份验证。以下是设置密码并连接到Redis服务器的示例代码:
<?php$redis=newRedis();// 连接到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=newRedis();// 连接到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=newRedis();$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=newRedis();// 连接到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');
@漏刻有时
版权归原作者 漏刻有时 所有, 如有侵权,请联系我们删除。