PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
PHP使用Redis实战实录系列
- PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案
- PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
Redis扩展方法和PHP连接Redis的多种方案
- 一、Redis扩展方法
- 二、php操作Redis语法
- 三、PHP连接Redis
- 1.PHP中使用带密码的连接Redis
- 2.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连接Redis
1.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');
@漏刻有时
相关文章:
PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
PHP使用Redis实战实录系列 PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案 Redis扩展方法和PHP连接Redis的多种方案 一、Redis扩展方法二、php操作Redis语…...
【Docker】Docker应用部署之Docker容器安装Redis
目录 一、搜索Redis镜像 二、拉取Redis镜像 三、创建容器 四、测试使用 一、搜索Redis镜像 docker search redis 二、拉取Redis镜像 docker pull redis:版本号 # 拉取对应版本的redis镜像 eg: docker pull redis:5.0 三、创建容器 docker run -id --nameredis -p 6379:637…...
【C++】STL——list的介绍和使用、list增删查改函数的介绍和使用、push_back、pop_back
文章目录 1.list的使用2.list的增删查改函数(1)push_front 在list首元素前插入值为val的元素(2)pop_front 删除list中第一个元素(3)push_back 在list尾部插入值为val的元素(4)pop_ba…...
“RWEQ+”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践
土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一,土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2,占国土总面积的16.7%,严重影响这些地区的资源开发和社会经…...
ChatGPT在智能推送和个性化广告中的应用如何?
ChatGPT在智能推送和个性化广告领域具有广泛的应用潜力。智能推送和个性化广告是指根据用户的个性化需求和兴趣,精准地向用户推送相关的信息和广告内容。ChatGPT作为一种预训练的通用语言模型,具有强大的语言理解和生成能力,可以在智能推送和…...
科技的成就(四十八)
373、新的编程语言 Swift 2014 年 6 月 2 日,苹果在 WWDC 上发布了新的编程语言 Swift。Swift 由克里斯拉特纳在苹果内部主持开发,历时 4 年。它是一种支持多编程范式的可编译语言,其设计简单、高效、安全,用来开发 macOS/OS X、i…...
spring5高级49讲
文章目录 1、BeanFactory与ApplicationContext2、BeanFactory与ApplicationContext的容器实现BeanFactory的容器实现后处理器排序 ApplicationContext的容器实现 3、Bean的生命周期Bean后处理器 4、常见的Bean后处理器5、常见BeanFactory后处理器6、Aware和InitializingBean接口…...
MacOS本地安装Hadoop3
金翅大鹏盖世英,展翅金鹏盖世雄。 穿云燕子锡今鸽,踏雪无痕花云平。 ---------------- 本文密钥:338 ----------------- 本文描述了在macbook pro的macos上安装hadoop3的过程,也可以作为在任何类linux平台上安装hadoop3借鉴。 …...
十五章:使用类别峰值响应的弱监督实例分割
0.摘要 目前,使用图像级别标签而不是昂贵的像素级掩码进行弱监督实例分割的研究还未得到充分探索。本文通过利用类别峰值响应来实现一个分类网络,用于提取实例掩码,来解决这个具有挑战性的问题。只通过图像标签的监督下,完全卷积的…...
自然语言处理从入门到应用——LangChain:模型(Models)-[聊天模型(Chat Models):基础知识]
分类目录:《自然语言处理从入门到应用》总目录 聊天模型是语言模型的一种变体。虽然聊天模型在内部使用语言模型,但它们公开的接口略有不同。它们不是提供一个“输入文本,输出文本”的API,而是提供一个以“聊天消息”作为输入和输…...
Asp.Net 使用Log4Net (SQL Server)
Asp.Net 使用Log4Net (SQL Server) 1. 创建数据库表 首先,在你的SQL Server数据库中创建一个用于存储日志的表。以下是一个简单的表结构示例: CREATE TABLE [dbo].[Logs]([Id] [INT] IDENTITY(1,1) PRIMARY KEY,[Date] [DATETIME] NOT NULL,[Thread] …...
Vue2基础五、工程化开发
零、文章目录 Vue2基础五、工程化开发 1、工程化开发和脚手架 (1)开发 Vue 的两种方式 核心包传统开发模式:基于 html / css / js 文件,直接引入核心包,开发 Vue。工程化开发模式:基于构建工具…...
发现 ModStartCMS:构建梦想网站的全新选择
亲爱的网站开发者和内容创作者们, 在当今数字化的时代,网站已经成为展示品牌、传递信息和吸引目标受众的关键渠道。为了帮助您更高效地打造梦想中的网站,我们荣幸地向您介绍 ModStartCMS,这是一款基于 Laravel 的全新模块化内容管…...
大数据Flink(五十二):Flink中的批和流以及性能比较
文章目录 Flink中的批和流以及性能比较 一、Flink中的批和流...
【MySQL】MySQL索引、事务、用户管理
20岁的男生穷困潦倒,20岁的女生风华正茂,没有人会一直风华正茂,也没有人会一直穷困潦倒… 文章目录 一、MySQL索引特性(重点)1.磁盘、OS、MySQL,在进行数据IO时三者的关系2.索引的理解3.聚簇索引࿰…...
函数重载与引用
文章目录 一、函数重载1. 重载规则2.重载列子3.函数名修饰规则 二、引用1.本质2.特性1. 引用必须在定义时初始化2 . 一个变量可以有多个引用3 . 引用一旦引用一个实体,就不能引用其他实体 3.引用例子4.引用的权限5.效率比较6.指针跟引用的区别 一、函数重载 函数重…...
如何快速模拟一个后端 API
第一步:创建一个文件夹,用来存储你的数据 数据: {"todos": [{ "id": 1, "text": "学习html44", "done": false },{ "id": 2, "text": "学习css", "…...
DLA :pytorch添加算子
pytorch的C extension写法 这部分主要介绍如何在pytorch中添加自定义的算子,需要以下cuda基础。就总体的逻辑来说正向传播需要输入数据,反向传播需要输入数据和上一层的梯度,然后分别实现这两个kernel,将这两个kernerl绑定到pytorch即可。 a…...
Java特殊时间格式转化
平常开发过程当中,我们可能会见到有的日期格式是这样的。 1、2022-12-21T12:20:1608:00 2、2022-12-21T12:20:16.0000800 3、2022-12-21T12:20:16.00008:00下面来说一下这种时间格式怎么转换 第一种:2022-12-21T12:20:1608:00 代码如下: p…...
在CSDN学Golang云原生(Kubernetes声明式资源管理Kustomize)
一,生成资源 在 Kubernetes 中,我们可以通过 YAML 或 JSON 文件来定义和创建各种资源对象,例如 Pod、Service、Deployment 等。下面是一个简单的 YAML 文件示例,用于创建一个 Nginx Pod: apiVersion: v1 kind: Pod m…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
