You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel+Redis可获取键列表但无法读取单个键值的问题

Laravel Redis 键读取异常问题解决

问题场景

在Laravel 8/10项目中将Redis作为缓存使用时,遇到如下异常:

  • 通过Redis::keys("*api_count*")获取到的键列表包含完整键名,例如dev_database_api_count_companies_2023_05_16
  • 直接使用该完整键调用Redis::get('dev_database_api_count_companies_2023_05_16')返回null
  • 但在redis-cli中执行GET "dev_database_api_count_companies_2023_05_16",能正常获取到值"204"

问题原因

Laravel的Redis facade对键的前缀处理存在差异:

  • keys方法直接返回Redis中存储的原始完整键名(包含配置的前缀),不会做任何前缀处理
  • 而get、set等读写方法会自动给传入的键名添加配置文件中设置的Redis前缀。如果传入已经带前缀的完整键,实际会查找前缀+完整键名这个不存在的键,因此返回null

解决方法

从keys返回的完整键名中移除配置的Redis前缀,再传入get方法即可正常读取值:

  1. 获取当前Redis配置的前缀:
$prefix = Redis::getPrefix();
  1. 遍历键列表,移除前缀后读取值:
$key_names = Redis::keys("*api_count*");
foreach ($key_names as $fullKey) {
    // 去掉前缀得到实际要读取的键
    $targetKey = str_replace($prefix, '', $fullKey);
    // 正确读取对应值
    $value = Redis::get($targetKey);
    // 后续业务处理逻辑
}

比如配置的前缀是dev_database_,那么dev_database_api_count_companies_2023_05_16去掉前缀后就是api_count_companies_2023_05_16,用这个键调用get就能拿到正确的204。

内容的提问来源于stack exchange,提问作者realtebo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:34:54