动态添加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 三元运算符实例详细介绍
如何快速完成中国万网建站详细流程?

