当前位置: 首页 > news >正文

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对象可用的方法:

  1. 连接和关闭连接:

    • connect($host, $port, $timeout): 连接到Redis服务器。
    • close(): 关闭Redis连接。
  2. 数据操作:

    • set($key, $value): 设置指定键的值。
    • get($key): 获取指定键的值。
    • del($key1, $key2, ...): 删除一个或多个键。
    • incr($key): 增加键对应的值。
    • decr($key): 减少键对应的值。
    • exists($key): 检查键是否存在。
    • 其他诸如appendstrlenmsetmget等等。
  3. 列表操作:

    • lpush($key, $value1, $value2, ...): 在列表左侧插入一个或多个值。
    • rpush($key, $value1, $value2, ...): 在列表右侧插入一个或多个值。
    • lpop($key): 弹出列表左侧的值。
    • rpop($key): 弹出列表右侧的值。
    • llen($key): 获取列表长度。
    • 其他诸如lindexlrangeltrim等等。
  4. 哈希操作:

    • hset($key, $field, $value): 设置哈希中指定字段的值。
    • hget($key, $field): 获取哈希中指定字段的值。
    • hdel($key, $field1, $field2, ...): 删除一个或多个哈希字段。
    • hgetall($key): 获取哈希中所有字段和对应的值。
    • 其他诸如hincrbyhkeyshvals等等。
  5. 集合操作:

    • sadd($key, $member1, $member2, ...): 向集合添加一个或多个成员。
    • srem($key, $member1, $member2, ...): 从集合中移除一个或多个成员。
    • smembers($key): 获取集合的所有成员。
    • sismember($key, $member): 检查成员是否存在于集合中。
    • 其他诸如sintersunionsdiff等等。

这只是Redis提供的一些常见操作方法的示例列表,还有更多其他方法可供使用。具体可以参考Redis扩展的文档或官方网站来了解更多关于Redis操作的详细信息。

二、php操作Redis语法

在PHP中,可以使用Redis扩展来操作Redis服务器。下面是一些常用的PHP操作Redis的语法示例:

  1. 连接到Redis服务器:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);// 或者使用连接池连接
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);
  1. 设置和获取键值对:
// 设置键的值
$redis->set('key', 'value');// 获取键的值
$value = $redis->get('key');
  1. 删除键:
$redis->del('key');
  1. 判断键是否存在:
if ($redis->exists('key')) {// 键存在的处理逻辑
} else {// 键不存在的处理逻辑
}
  1. 进行哈希操作:
// 设置哈希表字段的值
$redis->hset('hash_key', 'field', 'value');// 获取哈希表字段的值
$value = $redis->hget('hash_key', 'field');// 删除哈希表字段
$redis->hdel('hash_key', 'field');
  1. 进行列表操作:
// 在列表左侧插入值
$redis->lpush('list_key', 'value1', 'value2');// 在列表右侧插入值
$redis->rpush('list_key', 'value3', 'value4');// 弹出列表左侧的值
$value = $redis->lpop('list_key');// 弹出列表右侧的值
$value = $redis->rpop('list_key');
  1. 进行集合操作:
// 向集合添加成员
$redis->sadd('set_key', 'member1', 'member2');// 从集合中移除成员
$redis->srem('set_key', 'member1');// 检查成员是否存在于集合中
if ($redis->sismember('set_key', 'member1')) {// 成员存在的处理逻辑
} else {// 成员不存在的处理逻辑
}
  1. 键设置过期时间
    在Redis中,你可以使用EXPIRE命令为一个键设置过期时间,从而控制该键的有效期。以下是一些在Redis中设置键的有效期的方法:

  2. EXPIRE key seconds:设置key的过期时间为seconds秒。当seconds秒钟过去后,键将会自动过期并被删除。

例如,下面的代码将名为mykey的键设置为过期时间为60秒:

$redis->expire('mykey', 60);
  1. PEXPIRE key milliseconds:类似于EXPIRE命令,但时间以毫秒为单位。

例如,下面的代码将名为mykey的键设置为过期时间为3000毫秒(即3秒):

$redis->pexpire('mykey', 3000);
  1. EXPIREAT key timestamp:设置key的过期时间戳,以秒为单位。timestamp参数是一个UNIX时间戳,表示键的过期时间点。

例如,下面的代码将名为mykey的键设置为在1612266625秒之后过期:

$redis->expireat('mykey', 1612266625);
  1. 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()等,并检查每个操作的返回结果来判断是否发生了异常。

使用这种写法,你可以根据返回结果进行逻辑判断和处理,而无需使用trycatch块来捕获异常。这种写法相对简单,但在处理多个操作和嵌套逻辑时可能会导致代码变得复杂。

记得在代码中适当处理连接和操作过程中的异常,确保你的程序具备健壮性并能正确处理错误情况。

四、避坑指南

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&#xff1a;宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案PHP使用Redis实战实录2&#xff1a;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的增删查改函数&#xff08;1&#xff09;push_front 在list首元素前插入值为val的元素&#xff08;2&#xff09;pop_front 删除list中第一个元素&#xff08;3&#xff09;push_back 在list尾部插入值为val的元素&#xff08;4&#xff09;pop_ba…...

“RWEQ+”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…...

ChatGPT在智能推送和个性化广告中的应用如何?

ChatGPT在智能推送和个性化广告领域具有广泛的应用潜力。智能推送和个性化广告是指根据用户的个性化需求和兴趣&#xff0c;精准地向用户推送相关的信息和广告内容。ChatGPT作为一种预训练的通用语言模型&#xff0c;具有强大的语言理解和生成能力&#xff0c;可以在智能推送和…...

科技的成就(四十八)

373、新的编程语言 Swift 2014 年 6 月 2 日&#xff0c;苹果在 WWDC 上发布了新的编程语言 Swift。Swift 由克里斯拉特纳在苹果内部主持开发&#xff0c;历时 4 年。它是一种支持多编程范式的可编译语言&#xff0c;其设计简单、高效、安全&#xff0c;用来开发 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

金翅大鹏盖世英&#xff0c;展翅金鹏盖世雄。 穿云燕子锡今鸽&#xff0c;踏雪无痕花云平。 ---------------- 本文密钥&#xff1a;338 ----------------- 本文描述了在macbook pro的macos上安装hadoop3的过程&#xff0c;也可以作为在任何类linux平台上安装hadoop3借鉴。 …...

十五章:使用类别峰值响应的弱监督实例分割

0.摘要 目前&#xff0c;使用图像级别标签而不是昂贵的像素级掩码进行弱监督实例分割的研究还未得到充分探索。本文通过利用类别峰值响应来实现一个分类网络&#xff0c;用于提取实例掩码&#xff0c;来解决这个具有挑战性的问题。只通过图像标签的监督下&#xff0c;完全卷积的…...

自然语言处理从入门到应用——LangChain:模型(Models)-[聊天模型(Chat Models):基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 聊天模型是语言模型的一种变体。虽然聊天模型在内部使用语言模型&#xff0c;但它们公开的接口略有不同。它们不是提供一个“输入文本&#xff0c;输出文本”的API&#xff0c;而是提供一个以“聊天消息”作为输入和输…...

Asp.Net 使用Log4Net (SQL Server)

Asp.Net 使用Log4Net (SQL Server) 1. 创建数据库表 首先&#xff0c;在你的SQL Server数据库中创建一个用于存储日志的表。以下是一个简单的表结构示例&#xff1a; CREATE TABLE [dbo].[Logs]([Id] [INT] IDENTITY(1,1) PRIMARY KEY,[Date] [DATETIME] NOT NULL,[Thread] …...

Vue2基础五、工程化开发

零、文章目录 Vue2基础五、工程化开发 1、工程化开发和脚手架 &#xff08;1&#xff09;开发 Vue 的两种方式 核心包传统开发模式&#xff1a;基于 html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xf…...

发现 ModStartCMS:构建梦想网站的全新选择

亲爱的网站开发者和内容创作者们&#xff0c; 在当今数字化的时代&#xff0c;网站已经成为展示品牌、传递信息和吸引目标受众的关键渠道。为了帮助您更高效地打造梦想中的网站&#xff0c;我们荣幸地向您介绍 ModStartCMS&#xff0c;这是一款基于 Laravel 的全新模块化内容管…...

大数据Flink(五十二):Flink中的批和流以及性能比较

文章目录 Flink中的批和流以及性能比较 ​​​​​​​​​​​​​​一、Flink中的批和流...

【MySQL】MySQL索引、事务、用户管理

20岁的男生穷困潦倒&#xff0c;20岁的女生风华正茂&#xff0c;没有人会一直风华正茂&#xff0c;也没有人会一直穷困潦倒… 文章目录 一、MySQL索引特性&#xff08;重点&#xff09;1.磁盘、OS、MySQL&#xff0c;在进行数据IO时三者的关系2.索引的理解3.聚簇索引&#xff0…...

函数重载与引用

文章目录 一、函数重载1. 重载规则2.重载列子3.函数名修饰规则 二、引用1.本质2.特性1. 引用必须在定义时初始化2 . 一个变量可以有多个引用3 . 引用一旦引用一个实体&#xff0c;就不能引用其他实体 3.引用例子4.引用的权限5.效率比较6.指针跟引用的区别 一、函数重载 函数重…...

如何快速模拟一个后端 API

第一步&#xff1a;创建一个文件夹&#xff0c;用来存储你的数据 数据&#xff1a; {"todos": [{ "id": 1, "text": "学习html44", "done": false },{ "id": 2, "text": "学习css", "…...

DLA :pytorch添加算子

pytorch的C extension写法 这部分主要介绍如何在pytorch中添加自定义的算子&#xff0c;需要以下cuda基础。就总体的逻辑来说正向传播需要输入数据&#xff0c;反向传播需要输入数据和上一层的梯度&#xff0c;然后分别实现这两个kernel,将这两个kernerl绑定到pytorch即可。 a…...

Java特殊时间格式转化

平常开发过程当中&#xff0c;我们可能会见到有的日期格式是这样的。 1、2022-12-21T12:20:1608:00 2、2022-12-21T12:20:16.0000800 3、2022-12-21T12:20:16.00008:00下面来说一下这种时间格式怎么转换 第一种&#xff1a;2022-12-21T12:20:1608:00 代码如下&#xff1a; p…...

在CSDN学Golang云原生(Kubernetes声明式资源管理Kustomize)

一&#xff0c;生成资源 在 Kubernetes 中&#xff0c;我们可以通过 YAML 或 JSON 文件来定义和创建各种资源对象&#xff0c;例如 Pod、Service、Deployment 等。下面是一个简单的 YAML 文件示例&#xff0c;用于创建一个 Nginx Pod&#xff1a; apiVersion: v1 kind: Pod m…...

后台管理系统中常见的三栏布局总结:使用element ui构建

vue2 使用 el-menu构建的列表布局&#xff1a; 列表可以折叠展开 <template><div class"home"><header><el-button type"primary" click"handleClick">切换</el-button></header><div class"conte…...

SpringCloud学习路线(10)——分布式搜索ElasticSeach基础

一、初识ES &#xff08;一&#xff09;概念&#xff1a; ES是一款开源搜索引擎&#xff0c;结合数据可视化【Kibana】、数据抓取【Logstash、Beats】共同集成为ELK&#xff08;Elastic Stack&#xff09;&#xff0c;ELK被广泛应用于日志数据分析和实时监控等领域&#xff0…...

CSS翻转DIV展示顺序

项目国际化开发中&#xff0c;阿拉伯语是从右往左读的&#xff0c;在做样式兼容时&#xff0c;一些表单代码块也需要 label在右&#xff0c;表单在左。如果整个项目改div的话代价太大了&#xff0c;所以需要做样式翻转。 html <div class"container"><div …...

python 源码中 PyId_stdout 如何定义的

python 源代码中遇到一个变量名 PyId_stdout&#xff0c;搜不到在哪里定义的&#xff0c;如下只能搜到引用的位置&#xff08;python3.8.10&#xff09;&#xff1a; 找了半天发现是用宏来构造的声明语句&#xff1a; // filepath: Include/cpython/object.h typedef struct …...

Mybatis映射关系mybatis核心配置文件

目录 1.Mybatis映射关系 1.1一对一映射之resultType 1.2resultMap处理映射关系 2.mybatis核心配置文件 1. properties&#xff08;属性&#xff09; 2. settings&#xff08;设置&#xff09; 3.typeAliases&#xff08;类型别名&#xff09; 4.environments&#xff0…...

Mybatis中limit用法与分页查询

错误示范 错误示范一&#xff1a; <select id"fileInspectionList" resultType"map">SELECT <include refid"aip_n_static_cols"/>FROM sys_inspection_form WHERE<if test" type admin.toString() ">dept_id …...

libcomposite: Unknown symbol config_group_init (err 0)

加载libcomposite.ko 失败 问题描述 如图&#xff0c;在做USB OTG 设备模式的时候需要用到libcomposite.ko驱动&#xff0c;加载失败了。 原因&解决方法 有一个依赖叫configfs.ko的驱动没有安装。可以从内核代码的fs/configfs/configfs.ko中找到这个驱动。先加载confi…...

Spring Tool Suite 4

参考&#xff1a;Spring tool suite4 安装及配置_springtoolsuite4_猿界零零七的博客-CSDN博客 下载&#xff1a;Spring | Tools 将下载的JAR进行解压两次&#xff0c;直至解压出contents中的sts 双击启动 第一次打开需要指定工作区文件夹 配置Maven的config 安装插件...

带你读论文第三期:微软研究员、北大博士陈琪,荣获NeurIPS杰出论文奖

Datawhale干货 来源&#xff1a;WhalePaper&#xff0c;负责人&#xff1a;芙蕖 WhalePaper简介 由Datawhale团队成员发起&#xff0c;对目前学术论文中比较成熟的 Topic 和开源方案进行分享&#xff0c;通过一起阅读、分享论文学习的方式帮助大家更好地“高效全面自律”学习&…...

农业中的计算机视觉 2023

物体检测应用于检测田间收割机和果园苹果 一、说明 欢迎来到Voxel51的计算机视觉行业聚焦博客系列的第一期。每个月&#xff0c;我们都将重点介绍不同行业&#xff08;从建筑到气候技术&#xff0c;从零售到机器人等&#xff09;如何使用计算机视觉、机器学习和人工智能来推动…...