Redis低版本客户端Jedis2.9.0兼容高版本redis(比如redis6)不支持ACL的问题(亲测可用)

 

redis6版本及以上使用了acl认证  就是通过账号密码去认证,但是在之前版本都是只需要密码的,这种如果要适配,可能就要升级jedis客户端依赖的,但是一些老项目都不能随便升级的 之前的代码可能就不适配了

如果就要考虑使用现有的jedis版本 如:2.9.0 去支撑redis6的连接 以下有两种方式

 

第一种:可以不修改任何配置

根据redis官网说的, 如果没有账号的话,redis默认就用 用户名“default” 那么只要redis那边配置一个 用户名:default  密码:xxxx 的这个账号连接 ,那么我们就可以使用现有的方式(不用用户名)去连接了

官网地址:https://redis.com.cn/commands/auth.html

 

第二种,需要源代码

 

在不改造任何版本框架版本的场景下,仅仅进行使用适配的模型和能力进行实现用户名和密码的登陆方式。其中就要用到一个原则就是项目目录与jar包中的文件相同的全限定名的时候,会优先采用项目目录中的类进行加载,从而我们就获得了进行覆盖jedis源码的能力。

我们将整个BinaryClient全部拷贝出来,放到我们的项目里面,并且包名必须为:redis.clients.jedis。

 public void auth(String password) {
         setPassword(password);
         sendCommand(AUTH, password);
 }

把代码修改为

public void auth( String password) {
        String userName = RedisUserName.getRedisUserName();
        if(StringUtils.isNotBlank(userName)){
            setPassword(password);
            sendCommand(Command.AUTH,userName, password);
        }
        else {
            setPassword(password);
            sendCommand(Command.AUTH, password);
        }
    }

 

其中

RedisUserName.getRedisUserName()

这个是获取配置文件的设置的redis username的值,但是因为一个是配置文件获取,一个是静态方法使用里面使用 ,我这里也没有太好的办法 所以就不写了,大家根据自己的来

但是我用的是根据这个方式,仅供参考:https://www.cnblogs.com/pxblog/p/15065785.html 先注入,然后通过这个获取注入的bean的值

 

posted @ 2025-02-24 17:13  yvioo  阅读(383)  评论(0)    收藏  举报