我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

如果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>

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

如果redis已在线上业务使用中,但没有添加密码认证,那么如何在不影响业务服务的前提下给redis添加密码认证,就是一个需要仔细考虑的问题。 本文描述一种可行的方案,适用于客户端使用了jedis连接池,服务端使用了redis master-
2022-06-04

redis配置认证密码的方法

1.通过配置文件进行配置 yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到#requirepass foobared 去掉行前的注释,并修改密码为所需的密码,保存文件requirepass myRe
2022-06-04

dedecms添加登录管理认证码的方法

本文实例讲述了dedecms添加登录管理认证码的方法。分享给大家供大家参考。具体分析如下: 随着dedecms用的人越来越多,也就引来各种关注,然后就各种漏洞、入侵,最近又爆出了一个堪称全版本都有的漏洞,的确,我googlehack了一下,
2022-06-12

Android动态添加view的方法示例

由于项目需求菜单写活,效果如下:这里的按钮数量是可变的.png由于不是可滑动控件,我用的百分比布局做的适配 LinearLayout typeLayout = (LinearLayout) headerView.findViewById(R
2023-05-30

redis加动态锁的方法是什么

在Redis中实现动态锁的方法有多种,以下是一种常见的方法:1. 使用SET命令设置锁:在获取锁之前,使用SET命令将一个特定的键值对写入Redis,键为锁的名称,值为一个唯一的标识符(如UUID)。如果SET命令成功执行且返回OK,则表示
2023-08-30

Android使用addView动态添加组件的方法

在项目开发中,我们经常需要进行动态添加组件,其中可添加的部分有两项:布局和组件 其中,添加的布局主要有RelativeLayout型(相对布局)的和LinearLayout(线性布局)添加的组件主要有文本显示框,编辑框,按钮等组件。 下面
2022-06-06

Android动态添加menu菜单的简单方法

从menu按键开始,涉及以下3个方法: 1、onCreateOptionsMenu(Menu menu)2、onPrepareOptionsMenu(Menu menu)3、onOptionsItemSelected(MenuItem it
2022-06-06

gridview动态添加一列的方法是什么

在GridView中动态添加一列,可以通过以下方法实现:1. 在GridView的DataSource中添加一个新的列。- 如果使用SqlDataSource,可以在数据库查询中添加一个新的列,然后将其绑定到GridView。- 如果使用O
2023-09-11

winform动态添加控件的方法是什么

在WinForm中,可以通过以下方法动态添加控件:1. 使用Controls.Add方法使用Controls.Add方法可以将控件添加到父控件的Controls集合中。例如,可以使用以下代码将一个按钮控件添加到窗体中:```Button b
2023-09-05

qt动态添加控件的方法是什么

在Qt中,可以使用以下方法动态添加控件:1. 使用布局管理器:可以使用QHBoxLayout、QVBoxLayout或QGridLayout等布局管理器来将控件添加到窗口中。通过调用布局管理器的addWidget()方法将控件添加到布局中。
2023-09-25

Android动态添加View的问题解决方法

后台代码 代码如下: private void ChangeView() { ly.removeAllViews(); LayoutInflater inflater = (LayoutInflate
2022-06-06

redis动态增加节点的方法是什么

Redis动态增加节点的方法有两种,分别是使用Redis Sentinel和使用Redis Cluster。1. 使用Redis Sentinel:Redis Sentinel是Redis的高可用解决方案,它可以自动监控Redis节点的健康
2023-08-24

Spring动态添加定时任务的实现方法

本篇内容主要讲解“Spring动态添加定时任务的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring动态添加定时任务的实现方法”吧!一、背景在工作中,有些时候我们有些定时任务的执行
2023-06-20

android listview动态添加数据的方法是什么

在Android中,可以通过以下方法动态添加数据到ListView中:1. 创建一个数据源:首先,需要创建一个数据源,用于存储要显示在ListView中的数据。可以使用ArrayList或ArrayAdapter等数据结构来保存数据。2.
2023-09-16

Android动态添加设置布局与控件的方法

本文实例讲述了Android动态添加设置布局与控件的方法。分享给大家供大家参考,具体如下: 有时候我们会在代码端,动态的设置,添加布局和控件。下面我们就看来看一下如何处理,直接上代码,代码里面的注解很清楚了。 布局文件:fragment_h
2022-06-06

c#数组动态添加元素的方法是什么

在C#中,数组的大小是固定的,无法动态添加元素。如果需要动态添加元素,可以使用List类。List类是一个泛型集合类,可以根据需要动态调整大小。以下是一种使用List类动态添加元素的方法:```csharpList numbers = ne
2023-09-26

Vue一个动态添加background-image的方法是什么

这篇文章主要介绍了Vue一个动态添加background-image的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue一个动态添加background-image的方法是什么文章都会有所收获,下面
2023-07-05

编程热搜

目录