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的值
-----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------
(蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用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 消息队列