zoukankan      html  css  js  c++  java
  • redis远程连接

    Redis 默认是不支持远程连接的,需要手动开启
    一共修改两个地方:

      • 1. 注释掉 bind: 127.0.0.1
      • 2. 开启密码校验,去掉 requirepass 的注释 改完之后,保存退出,启动Redis

    简单的连接方式

    步骤

    一,更改配置文件     vim /etc/redis.conf

    1. 密码去掉注释,远程连接需要密码
    2. 把 bind 注释掉。

      对于Redis中bind的理解是:

      bind:是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址。

      如果指定了bind,则说明只允许来自指定网卡的Redis请求。如果没有指定,就说明可以接受来自任意一个网卡的Redis请求。

      举个例子:如果redis服务器(本机)上有两个网卡,每一个网卡对应一个IP地址,例如IP1和IP2。(注意这个IP1和IP2都是本机的IP地址)。

      我们的配置文件:bind IP1。  只有我们通过IP1来访问redis服务器,才允许连接Redis服务器,如果我们通过IP2来访问Redis服务器,就会连不上Redis。

     二,添加依赖包 这里我们使用

    jedis
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>3.2.0</version>
            </dependency>
    public static void main(String[] args) {
            Jedis jedis = new Jedis("39.97.241.18");
           // jedis.auth("foobared");
            System.out.println(jedis.ping());
        }

    三,连接问题

    创建对象时报错

    1.  可能端口安全组没开,我们开一下。

    1. 或则使用firewalld开启一下6379的端口

      firewall-cmd --add-port=6379/tcp --permanent

    密码认证错误

     看下配置文件的密码,传递密码试试

     看一个完整的Deno

    package demo;
    
    import redis.clients.jedis.Jedis;
    
    /**
     * @author Liruilong
     * @Date 2020/9/5 17:56
     * @Description: 函数接口,
     * 传递一个Redis对象,类似于 Runnable -> Thread
     * 类似策略模式,CallWithJedis可以看着为策略模板,
     */
    @FunctionalInterface
    public interface CallWithJedis {
        void call(Jedis jedis);
    
    }
    package demo;
    
    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    
    import java.util.Objects;
    
    /**
     * @author Liruilong
     * @Date 2020/9/5 17:49
     * @Description: 线程安全的Redis池(单例)
     */
    
    /**
     * @author Liruilong
     * @Date 2021/3/14 17:49
     * @Description: 线程安全的Redis池(单例)
     */
    public final class Redis {
        private  volatile JedisPool pool;
        private static   volatile Redis redis = null;
        private  Redis() {
            GenericObjectPoolConfig config = new GenericObjectPoolConfig();
            //连接池最大空闲数
            config.setMaxIdle(300);
            //最大连接数
            config.setMaxTotal(1000);
            //连接等待时间,-1 表示没限制
            config.setMaxWaitMillis(30000);
            //空闲时检查有效性
            config.setTestOnBorrow(true);
            // 地址,端口,超时时间,密码
            this.pool = new JedisPool(config,"39.97.241.18",6379,30000,"foobared");
        }
        public void execute(CallWithJedis callWithJedis){
            try (Jedis jedis = pool.getResource()){
                callWithJedis.call(jedis);
            }
        }
    
        public static Redis builder() {
            if (Objects.isNull(redis)) {
                synchronized (Redis.class) {
                    if (Objects.isNull(redis)) {
                        return new Redis();
                    }
                }
            }
             return  redis;
        }
        
    }
    加油,愿被这世界温柔以待 ^_^
  • 相关阅读:
    QK对中断的特殊处理
    程序控制的软件复位方法
    软件的按契约设计(DbC---Design by Contract)
    Arduino平台基于DbC的软件调试
    软件测试中的测不准原理
    关于嵌入式软件
    程序设计的SOLID原则
    CPS---(Cyber-Physical Sytem,信息物理融合系统)
    QP之QF原理
    QP之QEP原理
  • 原文地址:https://www.cnblogs.com/liruilong/p/14531885.html
Copyright © 2011-2022 走看看