如果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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
更新动态
- 张蓉蓉.2018-为情所害【豪记】【WAV+CUE】
- 张信哲《宽容》[WAV分轨][467M]
- 群星《原音精选 香港高级视听展20周年纪念 SACD》[ISO][1.1G]
- 林忆莲《精选16首》[DFF][2.2G]
- 李小沛-粉墨是梦[瑞鸣限量版]2023年12月28日SACDISO
- 三盲鼠《无敌超级录音至尊精选集第一集第二集第三集》[WAV+CUE]
- 张可儿《闻故乡》纯银[低速原抓WAV+CUE]
- 叶佩雯.2000-Amazing.Grace【英皇娱乐】【WAV+CUE】
- 周治平.1996-那一個春天浪漫夜晚Live(96年演唱会纪实)【宝丽金】【WAV+CUE】
- 杨丽珍.1989-怨叹你无情【华歌】【WAV+CUE】
- 刁寒.1995-春水似年华【京文】【WAV+CUE】
- 梁咏琪.2005-顺时针新歌+精选CD【丰华】【WAV+CUE】
- 林志颖.1994-别了晴雨的回忆【飞碟】【WAV+CUE】
- 《王菲5CD合集》[ISO][8.3G]
- 林肯公园 Linkin Park《Papercuts》2024 4.12最新专辑 [Flac][1G]