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');

@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++设计模式::代理模式(combination)-可运行

实现: 1) cImage:抽象类; cImageReal:派生类, 不可直接实例化; cImageProxy:派生代理类, 可直接实例化用来代理cImageReal; NOTICE:派生代理类用来简化对特定派生类的使用. 使用: 实例化代理类, 然后使用. 1) 设计框架 /*image.hpp*/ #pragma once #…

MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计

系列文章目录 MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库&#xff0c;对MySQL数据库的简单操作&#xff0c;MySQL的外接应用程序使用说明 MySQL笔记——表的修改查询相关的命令操作 MySQL案例——多表查询以及嵌套查询​​​​​​ MySQL笔记——数据库当…

【Kafka】消息队列Kafka进阶

目录 Kafka分区机制生产者分区写入策略轮询策略随机策略&#xff08;不用&#xff09;按key分配策略乱序问题自定义分区策略 消费者组Rebalance机制消费者分区分配策略Range范围分配策略RoundRobin轮询策略Stricky粘性分配策略 Kafka副本机制producer的ACKs参数acks配置为0acks…

three.js入门二:相机的zoom参数

环境&#xff1a; threejs&#xff1a;129 &#xff08;在浏览器的控制台下输入&#xff1a; window.__THREE__即可查看版本&#xff09;vscodewindowedge 透视相机或正交相机都有一个zoom参数&#xff0c;它可以用来将相机排到的内容在canvas上缩放显示。 要点&#xff1a;…

Mysql- 存储引擎

目录 1.Mysql体系结构 2.存储引擎简介 3.存储引擎特点 InnoDB MyISAM Memory 4.存储引擎选择 1.Mysql体系结构 MySQL整体的逻辑结构可以分为4层&#xff1a; 连接层&#xff1a;进行相关的连接处理、权限控制、安全处理等操作 服务层&#xff1a;服务层负责与客户层进行…

C++设计模式笔记

设计模式 如何解决复杂性&#xff1f; 分解 核心思想&#xff1a;分而治之&#xff0c;将大问题分解为多个小问题&#xff0c;将复杂问题分解为多个简单的问题。 抽象 核心思想&#xff1a;从高层次角度讲&#xff0c;人们处理复杂性有一个通用的技术&#xff0c;及抽象。…

ShardingSphere-Proxy水平分片详解与实战

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

Python爬虫时遇到SSL证书验证错误解决办法汇总

在进行Python爬虫任务时&#xff0c;遇到SSL证书验证错误是常见的问题之一。SSL证书验证是为了确保与服务器建立的连接是安全和可信的&#xff0c;但有时候可能会由于证书过期、不匹配或未受信任等原因导致验证失败。为了解决这个问题&#xff0c;本文将提供一些实用的解决办法…

【电路效应】信号处理和通信系统模型中的模拟电路效应研究(SimulinkMatlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、Simulink仿真实现 &#x1f4a5;1 概述 在信号处理和通信系统模型中&#xff0c;模拟电路效应研究是指考虑到实际电路的特性对信号进行建模和分析的过程。模拟电路效应…

ffplay播放器剖析(6)----音视频同步分析

文章目录 1. 音视频同步基础1.1 音视频同步策略1.2 音视频同步概念1.3 FFmpeg中的时间单位1.4 不同结构体的time_base/duration分析1.5 不同结构体的pts/dts分析1.6 ffplay中Frame结构体分析1.7 Vidoe Frame PTS获取及矫正1.8 Audio Frame PTS的获取 2.以音频为基准3.以视频为基…

excel绘制折线图或者散点图

一、背景 假如现在通过代码处理了一批数据&#xff0c;想看数据的波动情况&#xff0c;是不是还需要写个pyhon代码&#xff0c;读取文件&#xff0c;绘制曲线&#xff0c;看起来也简单&#xff0c;但是还有更简单的方法&#xff0c;就是直接生成csv文件&#xff0c;csv文件就是…

【MySQL】事务之MVCC(多版本并发控制)

【MySQL】事务-MVCC 一、数据库并发的三种场景二、MVCC2.1 3个记录隐藏字段2.2 undo log&#xff08;撤销日志&#xff09;2.3 模拟MVCC---update2.3.1 delete2.3.2 insert2.3.3 select 2.4 Read View2.5 整体流程 三、RR&#xff08;可重复读&#xff09;与RC&#xff08;读提…

【3-D深度学习:肺肿瘤分割】创建和训练 V-Net 神经网络,并从 3D 医学图像中对肺肿瘤进行语义分割研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

sql server表值函数

一、创建测试表 Employees 二、创建表值函数 -- DROP FUNCTION TableIntSplit;CREATE FUNCTION TableIntSplit(Text NVARCHAR(4000),Sign NVARCHAR(4000)) RETURNS tempTable TABLE(Id INT ) AS BEGIN DECLARE StartIndex INT DECLARE FindIndex INT DECLARE Content VARCHAR(…

阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)

一、前言 阿里云盘自动每日签到&#xff0c;无需部署&#xff0c;无需服务器 执行思路&#xff1a;使用金山文档的每日定时任务&#xff0c;执行阿里云盘签到接口。 二、效果展示&#xff1a; 三、步骤&#xff1a; 1、进入金山文档网页版 金山文档官网&#xff1a;https:…

Verilog语法学习——LV7_求两个数的差值

LV7_求两个数的差值 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 根据输入信号a,b的大小关系&#xff0c;求解两个数的差值&#xff1a;输入信号a,b…

【飞书】飞书导出md文档 | 飞书markdown文档导出 | 解决飞书只能导出pdf word

一、飞书导出markdown github地址&#xff1a;https://github.com/Wsine/feishu2md 这是一个下载飞书文档为 Markdown 文件的工具&#xff0c;使用 Go 语言实现。 请看这里&#xff1a;招募有需求和有兴趣的开发者&#xff0c;共同探讨开发维护&#xff0c;有兴趣请联系。 二、…

MySQL数据库分库分表备份(shell脚本)

创建目录 mkdir /server/scripts 一、使用脚本实现分库备份 1、创建脚本并编写 [rootlocalhost scripts]# vim bak_db_v1.sh #!/bin/bash ######################################### # File Name:bak_db_v1.sh # Version: V1.0 # Author:Shen QL # Email:17702390000163.co…

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽都顺利。 如…

短视频矩阵系统源码开发流程​

一、视频矩阵系统源码开发流程分为以下几个步骤&#xff1a; 四、技术开发说明&#xff1a; 产品原型PRD需求文档产品交互流程图部署方式说明完整源代码源码编译方式说明三方框架和SDK使用情况说明和代码位置平台操作文档程序架构文档 一、抖音SEO矩阵系统源码开发流程分为以…