redis集群,root总是没有权限

redis集群,root总是没有权限。MySQL集群,MQ集群也是

img

img

它们都使用独立于操作系统的用户

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7441570
  • 这篇博客也不错, 你可以看下宝塔 redis 远程连接, mysql root 开启权限
  • 除此之外, 这篇博客: Redis整合MySQL主从集群中的 4.2、代码整合 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • MySQLClusterImprovedDemo.java

    import redis.clients.jedis.Jedis;
    import java.sql.*;
    public class MySQLClusterImprovedDemo {
        //创建操作Redis和数据库的对象
        private Jedis masterJedis;  //指向主Redis服务器
        private Jedis slaveJedis;   //指向从Redis服务器
        private Connection masterConn;  //连接主库的对象
        private Connection slaveConn;   //连接从库的对象
        PreparedStatement masterPs=null;    //对主库进行操作的对象
        PreparedStatement slavePs=null;     //对从库进行操作的对象
    
        private void init(){
            //MYSQL的连接参数
            String mySQLDriver="com.mysql.cj.jdbc.Driver";
            String masterUrl="jdbc:mysql://192.168.159.33:3306/redisDemo?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
            String slaveUrl="jdbc:mysql://192.168.159.33:3316/redisDemo?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
            String user="root";
            String pwd="123456";
            try{
                Class.forName(mySQLDriver);
                masterConn= DriverManager.getConnection(masterUrl,user,pwd);
                slaveConn= DriverManager.getConnection(slaveUrl,user,pwd);
                masterJedis=new Jedis("192.168.159.33",6379);
                slaveJedis=new Jedis("192.168.159.33",6380);
            }catch (SQLException e){
                e.printStackTrace();
            }catch (Exception e){
                e.printStackTrace();
            }
    
        }
    
        private void insertData(){
            //是向主MySQL服务器插入数据
            try{
                masterPs=masterConn.prepareStatement("insert into student(id,name,age,score) values(10,'Frank',18,100)");
                masterPs.executeUpdate();
            }catch (SQLException e){
                e.printStackTrace();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        private String getNameByID(String id){
            String key="Stu"+id;
            String name="";
            //如果存在于Redis,就先从Redis里获取
            if(slaveJedis.exists(key)){ //到从Redis服务器去找
                System.out.println("ID: "+key+" exists in Redis.");
                name=slaveJedis.get(key);//找到后到从Redis里读
                System.out.println("Name is: "+slaveJedis.get(key));
                return name;
            }else{  //没在Redis,就到从MySQL去读
                try{
                    slavePs=slaveConn.prepareStatement("select name from student where id=10");
                    ResultSet rs=slavePs.executeQuery();
                    if(rs.next())
                    {
                        System.out.println("ID: "+key+" exists in Slave MySQL");
                        name=rs.getString("name");
                        System.out.println("Name is: "+name);
                        //放入主Redis缓存
                        masterJedis.set(key,name);
                    }
                    return name;
                }catch (SQLException e){
                    e.printStackTrace();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            return name;
        }
    
        public static void main(String[] args) {
            MySQLClusterImprovedDemo tool=new MySQLClusterImprovedDemo();
            tool.init();
            tool.insertData();
            //场景1 在主Redis中没有读到,则到从MySQL服务器中读
            System.out.println(tool.getNameByID("10"));
            //场景2 当前ID=10已经存在于Redis,所以直接读缓存
            System.out.println(tool.getNameByID("10"));
        }
    }
    

    在这里插入图片描述

       为了突出重点,这里我并没有设置“缓存失效时间”和“防止缓存穿透”等方面的实施代码,但是这些要点同样重要。

  • 您还可以看一下 李振良老师的中大型网站架构演进与建设实践课程中的 部署MySQL与Redis数据库小节, 巩固相关知识点