Ruby调用Redis set方法报错:undefined method `set' for nil:NilClass
解决Ruby Redis连接后调用set报undefined method错误的问题
你的问题核心出在异常处理逻辑的漏洞上:当Redis.new初始化连接失败时,虽然rescue块捕获了错误并打印,但redis变量会保持nil状态。后续代码没有判断连接是否成功就直接执行redis.set,自然触发undefined method 'set' for nil:NilClass错误。而且当前的rescue只输出错误却不终止程序,会让你误以为Redis服务正常,实则连接初始化已经失败。
修复方案
方案一:连接失败直接终止程序
require "redis" begin redis = Redis.new(host:"127.0.0.1", port: 6379, db: 0) rescue => error p "Redis连接失败: #{error.message}" exit 1 # 终止程序,避免执行后续无效代码 end redis.set("pizza", "bufala") redis.close()
方案二:先判断连接有效性再执行操作
require "redis" redis = nil begin redis = Redis.new(host:"127.0.0.1", port: 6379, db: 0) rescue => error p "Redis连接失败: #{error.message}" end if redis redis.set("pizza", "bufala") redis.close() else p "无法执行Redis操作,连接未建立" end
额外排查点
- 手动执行
redis-cli ping,确认本地Redis服务是否真的能正常响应(返回PONG才是正常) - 检查Redis是否开启了密码认证,如果有,需要在
Redis.new中添加password: "你的密码"参数 - 尝试重新安装redis gem确保版本兼容:
gem uninstall redis && gem install redis
内容的提问来源于stack exchange,提问作者YasuoPlayer
相关产品推荐
相关产品推荐

