Redis扩展必须安装并启用才能使用new Redis(),否则报Class 'Redis' not found;predis是纯PHP客户端但性能较差;set/get默认序列化导致null值歧义;pipeline提升吞吐量,multi保证简单事务,复杂场景需Lua或应用层锁。
PHP 操作 Redis 前,必须确认 redis 扩展已编译进 PHP 或通过 extension=redis.so(Linux/macOS)或 extension=php_redis.dll(Windows)启用。仅装了 phpredis 包但没启用扩展,调用 new Redis() 会直接报错 Class 'Redis' not found。
验证方式很简单:
php -m | grep redis
或者在 Web 环境中运行:
true 才能继续;返回 false 就得先配扩展,不是装 composer require predis/predis 就能替代的predis 是纯 PHP 客户端,不依赖扩展,但性能和连接复用能力弱于原生 redis 扩展phpredis(5.3.7+ 版本默认 new Redis() 不带参数时不会自动连接,首次调用命令(如 set)才触发连接,且默认超时是 0(无限等待),线上环境极易卡死。必须显式调用 connect() 并设好超时。
connect($host, $port, $timeout, $retry_interval, $read_timeout) 中,$timeout 是连接建立超时(秒),$read_timeout 是读响应超时(秒),两者都应设为 1.0 或更小$retry_interval 在连接失败后重试前等待毫秒数,设为 100 可避免密集轮询pconnect() 在 CLI 脚本里——它不会真正复用连接,反而可能残留 socket 导致 Too many open files
connect('127.0.0.1', 6379, 1.0, 100, 1.0);
} catch (RedisException $e) {
// 注意:RedisException 不是 RuntimeException,需单独捕获
error_log('Redis connect failed: ' . $e->getMessage());
exit(1);
}
?>
set() 默认对非字符串值做 serialize(),get() 会自动 unserialize()。这看似方便,实则埋下隐患:
null 时,get() 返回 false(不是 null),且无法区分“键不存在”和“存了 null”redis.serializer = php(php.ini)会影响所有实例,不推荐;应在代码里统一用 setex() + json_encode() 控制格式$redis->set('key', (string)$value)
set('user:id:123', json_encode(['name' => 'Alice', 'age' => 30]));
$data = json_decode($redis->get('user:id:123'), t
rue);
// 比直接 set(array) + get() 更可控、无反序列化风险
?>
批量操作别盲目上 multi(Redis::PIPELINE)。它只是把命令攒起来发一次,不保证原子性;而 multi(Redis::MULTI) 才是事务,但 Redis 的事务不支持回滚,出错只报错不中断。
pipeline
multi + exec,但得自己检查 exec 返回值是否全为非 null
watch() 配合 multi 可实现乐观锁,但 watch 的 key 被改就会使 exec 返回 false,这点常被忽略真正难处理的是跨库、跨实例、含条件判断的复合操作——这时候就得退回到应用层加锁或用 Lua 脚本,而不是硬塞进 pipeline。
# php
# linux
# redis
# js
# json
# composer
# windows
# mac
# ai
# macos
# win
# lua
# String
# NULL
# require
# class
# 序列化
# 设为
# 就得
# 报错
# 重试
# 复用
# 的是
# 客户端
# 应用层
# 就能
相关文章:
C#如何在一个XML文件中查找并替换文本内容
如何用狗爹虚拟主机快速搭建网站?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何在阿里云通过域名搭建网站?
如何配置WinSCP新建站点的密钥验证步骤?
图册素材网站设计制作软件,图册的导出方式有几种?
如何快速生成专业多端适配建站电话?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Android使用GridView实现日历的简单功能
如何快速重置建站主机并恢复默认配置?
建站之星安装步骤有哪些常见问题?
如何访问已购建站主机并解决登录问题?
建站VPS选购需注意哪些关键参数?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
利用JavaScript实现拖拽改变元素大小
如何快速搭建高效WAP手机网站?
如何用AWS免费套餐快速搭建高效网站?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
高端企业智能建站程序:SEO优化与响应式模板定制开发
javascript基本数据类型及类型检测常用方法小结
设计网站制作公司有哪些,制作网页教程?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
股票网站制作软件,网上股票怎么开户?
C++时间戳转换成日期时间的步骤和示例代码
如何高效搭建专业期货交易平台网站?
如何用低价快速搭建高质量网站?
如何挑选最适合建站的高性能VPS主机?
如何在香港服务器上快速搭建免备案网站?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
寿县云建站:智能SEO优化与多行业模板快速上线指南
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
建站ABC备案流程中有哪些关键注意事项?
企业微网站怎么做,公司网站和公众号有什么区别?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
建站主机如何选?性能与价格怎样平衡?
怎么将XML数据可视化 D3.js加载XML
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
建站之星安装模板失败:服务器环境不兼容?
如何制作算命网站,怎么注册算命网站?
实例解析angularjs的filter过滤器
专业网站建设制作报价,网页设计制作要考什么证?
如何获取免费开源的自助建站系统源码?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
已有域名和空间如何快速搭建网站?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何通过FTP空间快速搭建安全高效网站?
Python lxml的etree和ElementTree有什么区别
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
*请认真填写需求信息,我们会在24小时内与您取得联系。