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…...
CentOS 7下‘Development Tools’和‘开发工具’组有区别吗?实测告诉你答案
CentOS 7下‘Development Tools’与‘开发工具’的隐藏关联:技术细节全解析在Linux系统管理中,yum的软件包组功能一直是个既实用又充满谜团的领域。特别是当系统语言环境与软件包元数据语言不一致时,开发者们常常会遇到一个有趣的现象&#x…...
13456
12356...
MBTI性格测试
简介 MBTI(Myers‑Briggs Type Indicator,迈尔斯‑布里格斯类型指标)是基于荣格心理类型理论发展出的性格类型工具,由凯瑟琳库克布里格斯及其女儿伊莎贝尔布里格斯迈尔斯创建。它通过四对偏好维度将个体的认知与行为倾向归纳为 16…...
FM3773 低功耗离线式恒流/恒压 PSR 控制器
概述 FM3773 是一种高性能的交流/直流用于电池充电器和适配器的电源控制器,内置 850V 功率三极管。该设备采用脉冲频率调制(PFM)的方法来建立非连续导通模式(DCM)反激式电源。 FM3773 提供精确的恒定电压,恒…...
MySQL GROUP BY 原理与优化
我刚工作的时候,有次统计每个用户的订单总金额,写了 SELECT user_id, SUM(amount) FROM orders GROUP BY user_id,结果执行了 60 秒还没出结果。DBA 帮我一看执行计划,发现没走索引,导致 Using temporary(用…...
基于GSM与Arduino的远程控制系统:DIY电话控制与短信报警方案
1. 项目概述与核心价值如果你曾经想过,在离家几十公里外,仅凭一部普通的手机,就能远程打开家里的车库门、查看门窗是否关好,甚至在异常情况发生时让系统自动打电话给你报警,那么这个基于GSM的远程控制系统项目…...
OpenRASP原理与实战:Java应用层实时防护技术详解
1. 为什么我宁愿花三天部署OpenRASP,也不愿再写第五个自定义WAF过滤器去年冬天,我在给一家做在线教育SaaS平台做安全加固时,连续踩了三个坑:第一次用NginxLua写了套SQL注入规则,结果学生提交的“SELECT * FROM courses…...
应对Claude Code访问不稳定,快速切换至Taotoken的应急方案
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 应对Claude Code访问不稳定,快速切换至Taotoken的应急方案 对于依赖Claude Code进行日常开发或自动化任务的用户来说&a…...
3分钟告别英文恐惧:Android Studio中文界面轻松切换指南
3分钟告别英文恐惧:Android Studio中文界面轻松切换指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是否曾经因…...
构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学
构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学 【免费下载链接】scdl Soundcloud Music Downloader 项目地址: https://gitcode.com/gh_mirrors/sc/scdl 在流媒体音乐主导的时代,音乐爱好者面临着一种矛盾:我们享受着…...
