动态添加Redis密码认证的方法

发布时间 - 2026-01-11 01:48:23    点击率:

如果redis已在线上业务使用中,但没有添加密码认证,那么如何在不影响业务服务的前提下给redis添加密码认证,就是一个需要仔细考虑的问题。

本文描述一种可行的方案,适用于客户端使用了jedis连接池,服务端使用了redis master-slave集群的情况。

1.定制jedis

对redis返回的错误的处理,做两处修改:

忽略 (error) ERR Client sent AUTH, but no password is set。使配置了密码的jedis可以在没有配置密码redis上使用;

发生(error) NOAUTH Authentication required时,将当前connection置为broken,从而将连接踢出连接池。这样动态给redis添加上密码时,jedis会自动重新创建可用连接。

我已经对jedis 2.8.x版本做好了以上修改。可以直接下载使用 。如果使用了更高的版本jedis,可以参考我的代码自行修改;如果使用了更低版本的,建议升级到2.8.x。

2.在项目代码中使用定制的jedis

修改maven配置。将原来的jedis依赖注释掉,添加对本地的定制jedis的依赖:

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.8.3</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/../libs/jedis-2.8.3.jar</systemPath> <!-- 此处的systemPath是jedis-2.8.3所在的相对路径 -->
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
  <version>2.4.2</version>
</dependency>
<!--
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.8.1</version>
</dependency>
-->

因为把定制jedis通过本地jar包的形式提供,maven不会自动加载jedis的依赖,所以需额外添加对commons-pool2的依赖。

3.如果使用了低版本的jedis

老版本jedis的returnBrokenResource和returnResource这两个方法在新版本jedis中已经废弃,如果升级jedis版本的话,需要替换为close方法。

替换前:

try {  
 // ... 
} catch (JedisException e) {
 // ...  
 pool.returnBrokenResource(jedis);  
}  
finally {  
 pool.returnResource(jedis);  
}

替换后:

try {  
 // ... 
} catch (JedisException e) {  
 // ...  
}  
finally {  
 jedis.close();
}

4.将使用定制jedis的项目代码上线

此时redis尚未添加密码,但定制jedis忽略了“ERR Client sent AUTH, but no password is set”,所以线上运行正常。

5.给redis server添加密码认证

动态添加密码会导致redis主从同步断开,为避免引起全量同步对业务造成较大影响。需要dba先调大redis master的client-output-buffer-limit和repl-backlog-size参数,再做配置密码操作。

给redis server添加密码的同时,观察业务代码的log,添加完密码后,log中会出现数次如下报错,随后恢复正常。报错次数是添加密码时,业务服务器的jedis连接池中与该redis server之间连接数量。

复制代码 代码如下:
redis.clients.jedis.exceptions.JedisConnectionException: NOAUTH Authentication required.

如果使用了shardedJedis,请逐个分片进行操作,最小化对业务服务的影响。

6.更换jedis为官方版本

定制jedis就是为了动态添加密码认证。添加完毕后,换回官方jedis,方便今后升级。

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.8.1</version>
</dependency>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# 动态添加Redis密码  # Redis动态密码认证  # Redis  # 密码认证  # 基于redis集群设置密码的实例  # redis-cli 使用密码登录的实例  # 解决Redis设置密码重启后失效的问题  # redis中修改配置文件中的端口号 密码方法  # Redis 密码设置和查看密码的方法  # 详解Redis使用认证密码登录  # redis密码设置、访问权限控制等安全设置  # Redis 数据库忘记密码找回或重置的解决方法  # 使用了  # 线上  # 报错  # 连接池  # 适用于  # 这两个  # 更高  # 可以直接  # 已在  # 升级到  # 下载使用  # 再做  # 新版本  # 恢复正常  # 数次  # 更低  # 中会  # 而将  # 两处  # 服务端 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  海南网站制作公司有哪些,海口网是哪家的?  如何快速生成橙子建站落地页链接?  个人网站制作流程图片大全,个人网站如何注销?  微信小程序 配置文件详细介绍  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  微信小程序 scroll-view组件实现列表页实例代码  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Python并发异常传播_错误处理解析【教程】  图册素材网站设计制作软件,图册的导出方式有几种?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Android滚轮选择时间控件使用详解  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  如何在Windows 2008云服务器安全搭建网站?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Linux系统命令中tree命令详解  如何快速上传建站程序避免常见错误?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何用搬瓦工VPS快速搭建个人网站?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何挑选最适合建站的高性能VPS主机?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  EditPlus中的正则表达式 实战(1)  如何在阿里云虚拟服务器快速搭建网站?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Laravel API资源类怎么用_Laravel API Resource数据转换  EditPlus 正则表达式 实战(3)  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Android仿QQ列表左滑删除操作  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  如何破解联通资金短缺导致的基站建设难题?  如何在IIS中新建站点并配置端口与IP地址?  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  php 三元运算符实例详细介绍  如何快速完成中国万网建站详细流程?