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

  2. 设置和获取键值对:

    // 设置键的值
    $redis->set(‘key’, ‘value’);

    // 获取键的值
    $value = $redis->get(‘key’);

  3. 删除键:

    $redis->del(‘key’);

  4. 判断键是否存在:

    if ($redis->exists(‘key’)) {
    // 键存在的处理逻辑
    } else {
    // 键不存在的处理逻辑
    }

  5. 进行哈希操作:

    // 设置哈希表字段的值
    $redis->hset(‘hash_key’, ‘field’, ‘value’);

    // 获取哈希表字段的值
    $value = $redis->hget(‘hash_key’, ‘field’);

    // 删除哈希表字段
    $redis->hdel(‘hash_key’, ‘field’);

  6. 进行列表操作:

    // 在列表左侧插入值
    $redis->lpush(‘list_key’, ‘value1’, ‘value2’);

    // 在列表右侧插入值
    $redis->rpush(‘list_key’, ‘value3’, ‘value4’);

    // 弹出列表左侧的值
    $value = $redis->lpop(‘list_key’);

    // 弹出列表右侧的值
    $value = $redis->rpop(‘list_key’);

  7. 进行集合操作:

    // 向集合添加成员
    $redis->sadd(‘set_key’, ‘member1’, ‘member2’);

    // 从集合中移除成员
    $redis->srem(‘set_key’, ‘member1’);

    // 检查成员是否存在于集合中
    if ($redis->sismember(‘set_key’, ‘member1’)) {
    // 成员存在的处理逻辑
    } else {
    // 成员不存在的处理逻辑
    }

  8. 键设置过期时间
    在Redis中,你可以使用EXPIRE命令为一个键设置过期时间,从而控制该键的有效期。以下是一些在Redis中设置键的有效期的方法:

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

@漏刻有时

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes 初学命令

基础命令 kubectl 运维命令常用&#xff1a; #查看pod创建过程以及相关日志 kubectl describe pod pod-command -n dev #查看某个pod&#xff0c;以yaml格式展示结果 kubectl get pod nginx -o yaml #查看pod 详情 以及对应的集群IP地址 kubectl get pods -o wide 1. kubetc…

[C++_] set | map | unordered_map

前文回顾&#xff1a; 【C】详解 set | multiset 【C】关联容器探秘&#xff1a;Map与Multimap详解 在 C 中&#xff0c;map 和 unordered_map 都是存储键值对的关联容器&#xff0c;但它们的实现和特性有显著区别。如下&#xff1a; 1. 底层实现与有序性 map 基于红黑树&a…

【计算机网络】TCP三次握手,四次挥手以及SYN,ACK,seq,以及握手次数理解

TCP三次握手图解 描述 第一次握手&#xff1a;客户端请求建立连接&#xff0c;发送同步报文(SYN1)&#xff0c;同时随机一个seqx作为初始序列号&#xff0c;进入SYN_SENT状态&#xff0c;等待服务器确认 第二次握手&#xff1a;服务端收到请求报文&#xff0c;如果同意建立连接…

DVWA -第二关-命令执行

这里是个ping命令的提交框 我们在输入ping命令的时候&#xff0c;同时执行其他命令操作 low 输入127.0.0.||ipconfig 消除乱码的方法&#xff1a;修改dvwaPage.inc.php文件中的”charsetutf-8”&#xff0c;修改”charsetGB2312” 可以显示出来&#xff0c;初级没有过滤 m…

Kibana:Spotify Wrapped 第二部分:深入挖掘数据

作者&#xff1a;来自 Elastic Philipp Kahr 我们将比以往更深入地探究你的 Spotify 数据并探索你甚至不知道存在的联系。 在由 Iulia Feroli 撰写的本系列的第一部分中&#xff0c;我们讨论了如何获取 Spotify Wrapped 数据并在 Kibana 中对其进行可视化。在第 2 部分中&#…

Week2 Using the Java Collection Libraries Lecture 2

1. Java为数据结构编程提供了哪些支持&#xff1f; &#xff08;1&#xff09;Java 提供了丰富的数据结构类&#xff0c;通过 Java 集合框架&#xff08;Java Collections Framework&#xff09; 来实现&#xff0c;常见的包括&#xff1a; Java 集合框架&#xff08;Java Col…

武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司举行校企联培座谈会

2025年2月21日下午&#xff0c;武汉大学生命科学学院与谱度众合&#xff08;武汉&#xff09;生命科技有限公司&#xff08;以下简称“谱度众合”&#xff09;在学院学术厅举行校企联培专业学位研究生合作交流会。武汉大学生命科学学院副院长刘星教授、生命科学学院周宇教授、产…

【随时随地学算法】本地部署hello-algo结合内网穿透远程学习新体验

文章目录 前言1.关于hello-algo2.安装Docker和Docker compose3.本地部署hello-algo4. hello-algo本地访问5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 本篇文章主要介绍如何在本地部署hello-algo算法学习必备项目&#xff0c;并结合cpol…

加油站小程序实战教程03站点管理

目录 1 创建数据源2 搭建后台功能2.1 搭建类目配置功能2.2 配置系统信息2.3 配置站点功能2.4 配置油号功能2.5 配置油枪功能2.6 配置站点菜单2.7 设置站点的操作列 总结 在开发小程序的时候&#xff0c;通常需要先拆解业务对应我们的需求分析&#xff0c;根据需求来推导数据结构…

Vidma Ver.2.14.0 高级版

Vidma Ver.2.14.0 高级版 Vidma 是一款易于使用的视频编辑器&#xff0c;提供多种音乐和流行视频效果选择&#xff0c;让您的视频在社交媒体上脱颖而出。您可以通过添加 swooshing 文本、流行效果、复古滤镜、精美贴纸、平滑过渡等等&#xff0c;轻松地从您的宝贵时刻创建有意…

网络通信/IP网络划分/子网掩码的概念和使用

文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…

win11编译pytorch cuda128版本流程

Geforce 50xx系显卡最低支持cuda128&#xff0c;torch cu128 release版本目前还没有释放&#xff0c;所以自己基于2.6.0源码自己编译wheel包。 1. 前置条件 1. 使用visual studio installer 安装visual studio 2022&#xff0c;工作负荷选择【使用c的桌面开发】,安装完成后将…

一周学会Flask3 Python Web开发-Jinja2模版中加载静态文件

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 一个Web项目不仅需要HTML模板&#xff0c;还需要许多静态文件&#xff0c;比如 CSS、JavaScript文件、图片以及音频等。在Fla…

DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略

DualPipe简介 今天是DeepSeek开源周的第四天&#xff0c;官方开源了一种新型并行计算优化策略——DualPipe。 其实大家阅读过Deepseek-V3技术报告的同学&#xff0c;对这个技术并不陌生。 开源地址&#xff1a;https://github.com/deepseek-ai/DualPipe 核心亮点 DualPipe&…

基于C#的CANoe CLR Adapter开发指南

一、引言 CANoe 是一款广泛应用于汽车电子开发和测试的工具&#xff0c;它支持多种编程接口&#xff0c;方便开发者进行自定义扩展。CANoe CLR Adapter 允许我们使用 C# 语言与 CANoe 进行交互&#xff0c;充分利用 C# 的强大功能和丰富的类库。本文将详细介绍如何基于 C# 进行…

Redis实现滑动窗口限流实践(Redisson限流器版)

文章目录 一、滑动窗口限流原理二、Redisson限流器三、代码示例1. 引入依赖2. 配置Redis连接3. 使用Redisson限流器4. 使用示例 四、总结五、其他优化方向六、代码说明 在高并发系统中&#xff0c;为了保护系统稳定性&#xff0c;防止突发流量压垮服务&#xff0c;限流是一种常…

实现Python+Django+Transformers库中的BertTokenizer和BertModel来进行BERT预训练,并将其应用于商品推荐功能

一、环境安装准备 #git拉取 bert-base-chinese 文件#创建 虚拟运行环境python -m venv myicrplatenv#刷新source myicrplatenv/bin/activate#python Django 集成nacospip install nacos-sdk-python#安装 Djangopip3 install Django5.1#安装 pymysql settings.py 里面需要 # 强制…

ollama本地部署DeepSeek-R1大模型使用前端JS调用的详细流程

以下是关于如何在本地部署 DeepSeek-R1 大模型&#xff08;通过 Ollama&#xff09;&#xff0c;并使用前端 JavaScript 调用其功能的详细流程。 前提条件 硬件要求&#xff1a; 建议至少 16GB RAM&#xff08;运行较小模型如 1.5B 或 7B 参数版本&#xff09;&#xff0c;如果…

Rocky Linux 8.5 6G内存 静默模式(没图形界面)安装Oracle 19C

Oracle19c 下载地址 Database Software Downloads | Oraclehttps://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_ee 目录 一、准备服务器 1、服务器可以克隆、自己装 2、修改主机名 3、重启 4、关闭selinux 5、关闭防火墙 5.1、…

【Qt QML】QML鼠标事件(MouseArea)

QML鼠标事件全面解析 一、MouseArea基础概念 在 QML 中,鼠标事件是处理用户与界面元素交互的重要部分。QML 提供了多种方式来处理鼠标事件,MouseArea 是 QML 中用于处理鼠标事件的核心元素,它可以覆盖在其他元素之上,捕获鼠标操作并触发相应的信号。 1、基本用法 import …