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 @   yvioo  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2023-02-24 Postgresql(pg)修改自增序列值
2021-02-24 Spring Boot新增一个YML配置文件,并进行加载
2021-02-24 Linux宝塔面板部署运行jar包
2020-02-24 centos使用docker 安装 rabbitMq 消息队列
点击右上角即可分享
微信分享提示