select必须为整数,因phpredis的redis_select()函数仅接受int类型参数,传字符串如"0"会静默失败,导致操作误入db 0且无报错提示。

是的,必须写整数,不能写字符串。
为什么select必须是整数?
ThinkPHP 的 Redis 驱动在底层调用 phpredis 扩展时,会直接将 select 值传给 redis_select() 函数。该函数只接受整型参数,传入字符串(如 "0" 或 "1")会导致静默失败——连接看似正常,但后续所有读写操作都落在默认库(db 0),或直接返回空/错误,且不报任何异常或日志提示。
常见错误写法与后果
-
'select' => "0"→ 连接成功,但实际未切换数据库,缓存键全写进 db 0 -
'select' => null或省略该字段 → 触发默认行为(通常为 db 0),但若 Redis 密码非空或配置复杂,可能引发认证失败 -
'select' => '1'(带引号)→ 和"0"同样静默失效,极易排查困难
正确写法示例
无论使用 config/cache.php、config/queue.php 还是独立的 config/redis.php,都应严格写成:
'select' => 0, 'select' => 1, 'select' => 15,
注意:数字不加引号,无空格,类型为 int。
如何验证是否生效?
部署后,可用 redis-cli 手动确认:
- 登录 Redis:
redis-cli -h 127.0.0.1 -p 6379 - 切换到目标库:
SELECT 1 - 查看键:
KEYS *或SCAN 0 MATCH *your_prefix*
如果应用中设置了 'select' => 1 但你在 db 0 里查到了缓存键,说明配置未生效,优先检查 select 类型是否为整数。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











