最近项目整体迁移到百度云,其中redis也是直接用的百度云的提供云服务,项目中有用到redis,之前本地环境项目启动都是ok,但是迁移到百度云后,启动项目,就报NOPERM this user has no permissions to run the config SET command,这个错误意思就是用户没有对config set 这个命令有操作权限,百度云用的是redis6.0,redis6.0是提供了更为细致的权限控制粒度,不仅支持用户名,密码,还有命令。仔细查看报错日志,发现是代码中有个RedisKeyExpirationListener类,是这个类执行了config set命令,导致报没有权限,但是我查看这个自定义类的代码,并没有发现这个类里有操作config set命令,这个类是我自定义的一个redis过期key的监听器,实现了redis的自带的监听器类KeyExpirationEventMessageListener。而redis 自带KeyExpirationEventMessageListener类是一个过期key的监听器,源码里应该是使用了config set命令,用来设置过期策略和处理过期key的。于是找到百度云的技术支持人员,说了这个情况,他们那边的回复,是config set命令确实是他们那边给禁止使用了,因为这个命令权限太大,如果需要哪些命令,需要提供白名单给到他们,他们升级版本后才可用。我感觉太过麻烦,就想着将KeyExpirationEventMessageListener类替换成MessageListener类,替换成这个类是可以启动了,也能完成过期key的监听,但是MessageListener类是redis顶层消息监听器,任何消息发布都会监听,订阅到,不仅仅是过期事件的监听,这个不符合业务的单一原则。因此还是打算让百度云添加命令权限白名单,同时升级版本给到我们用。
关于项目启动NOPERM this user has no permissions to run the config SET command报错问题排查
最新推荐文章于 2024-05-17 18:12:08 发布