「java链接r」java链接redis 主节点挂了

博主:adminadmin 2023-03-20 21:08:07 243

今天给各位分享java链接r的知识,其中也会对java链接redis 主节点挂了进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java链接redis 是什么协议

要在Java程序中使用使用操作Redis,需要确保有Redis的Java驱动程序和Java设置在机器上。可以检查看Java教程-学习如何在机器上安装Java。现在,让我们来看看如何设置Redis的Java驱动程序。

需要下载jedis.jar。请一定要下载它的最新版本。

需要包括jedis.jar到你的类路径中。

连接到Redis服务器

import redis.clients.jedis.Jedis;

public class RedisJava {

public static void main(String[] args) {

//Connecting to Redis server on localhost

Jedis jedis = new Jedis("localhost");

System.out.println("Connection to server sucessfully");

//check whether server is running or not

System.out.println("Server is running: "+jedis.ping());

}

}

java连接redis超时问题怎么解决

应该是redis本身的服务有问题了

本文所针对的连接超时问题所涉及的相关元素如下:

Redis客户端: Jedis (java)

Redis版本 :2.8.12

Redis部署操作系统类型:Linux

正文开始:

No 1.Redis执行大命令(时间复杂度为O(N)的命令)

问题剖析:

a.Redis服务器端通过单线程处理命令,一旦有大命令被执行,Redis将无法及时响应来自客户端的任何命令

关于Redis大命令的监控,可以查看slowlog来观察

b.在使用jedis作为redis客户端时,当redis连接池的配置参数testOnBorrow=true时,默认会在获取redis连接

时,先执行redis的ping方法,而基于原因a,此时redis将无法及时响应,自然会报出time out异常

如何解决:

a.尽量避免使用时间复杂度为O(N)的命令

b.如果无法避免使用时间复杂度为O(N)的命令,则应降低其使用频率,避免在业务高峰期时使用

No 2.Redis单次操作数据包过大

问题分析

a.单次操作数据包过大,且操作频繁,极有可能会导致网络拥堵

b.在使用jedis作为redis客户端时,当redis连接池的配置参数testOnBorrow=true时,默认会在获取redis连接

时,先执行redis的ping方法,而基于原因a,此时redis将无法及时响应,自然会报出time out异常

如何解决:

a.排查代码,确定是否存在大数据(数据条目过多/单条数据过大)操作,将其进行改造,改造方案有两个:

a1.数据拆分,变更数据类型(常见的情况是将java中的collection类型序列化后存入redis的String数据

类型中),如将String数据类型调整为hash/list/set等,这常用于解决单条数据量过大的情况

a2.调整业务逻辑,减少单次数据查询范围(常见的情况如将redis中的整个hash数据取回,在应用程序内存中获取需要的entry),如使用hget等单条查询命令替换hgetall命令

java 链接redis 怎么加锁

我介绍一下Redis分布式锁吧:

一、定义redis实现分布式锁的接口

[java] view plain copy print?

package com.iol.common.util.concurrent.locks;  

  

import java.io.Serializable;  

  

/** 

 * Description: 定义redis实现分布式锁的算法br / 

 * This program is protected by copyright IOL_SMALL_TAIL.br / 

 * Program Name: IOL_SMALL_TAILbr / 

 * Date: 2015年11月8日 

 * 

 * @author 王鑫 

 * @version 1.0 

 */  

public interface IRedisLockArithmetic extends Serializable {  

    /** 

     * 加锁算法br / 

     * @param key 

     * @return 

     */  

    public boolean lock(String key);  

      

    /** 

     * 解锁算法br / 

     * @param key 

     * @return 

     */  

    public boolean unLock(String key);  

}

二、redis分布式锁基础算法实现

[java] view plain copy print?

package com.iol.common.util.concurrent.locks.arithmetic;  

  

import org.slf4j.Logger;  

import org.slf4j.LoggerFactory;  

  

import com.iol.common.util.concurrent.locks.IRedisComponent;  

import com.iol.common.util.concurrent.locks.IRedisLockArithmetic;  

  

/** 

 * Description: redis分布式锁基础算法实现br / 

 * This program is protected by copyright IOL_SMALL_TAIL.br / 

 * Program Name: IOL_SMALL_TAILbr / 

 * Date: 2015年11月9日 

 * 

 * @author 王鑫 

 * @version 1.0 

 */  

public class RedisLockBaseArithmetic implements IRedisLockArithmetic {  

    /** 

     *serialVersionUID 

     */  

    private static final long serialVersionUID = -8333946071502606883L;  

      

    private Logger logger = LoggerFactory.getLogger(RedisLockBaseArithmetic.class);  

  

    /** 

     * redis操作方法 

     */  

    private IRedisComponent redisComp;  

      

    /** 

     * 超时时间,以毫秒为单位br / 

     * 默认为5分钟 

     */  

    private long overtime = 5 * 60 * 1000L;  

      

    /** 

     * 休眠时长,以毫秒为单位br / 

     * 默认为100毫秒 

     */  

    private long sleeptime = 100L;  

      

    /** 

     * 当前时间 

     */  

    private long currentLockTime;  

      

    /** 

     * @param redisComp the redisComp to set 

     */  

    public void setRedisComp(IRedisComponent redisComp) {  

        this.redisComp = redisComp;  

    }  

  

    /** 

     * @param overtime the overtime to set 

     */  

    public void setOvertime(long overtime) {  

        this.overtime = overtime;  

    }  

  

    /** 

     * @param sleeptime the sleeptime to set 

     */  

    public void setSleeptime(long sleeptime) {  

        this.sleeptime = sleeptime;  

    }  

  

    /* (non-Javadoc) 

     * @see com.iol.common.util.concurrent.locks.IRedisLockArithmetic#lock(java.lang.String, java.lang.Long) 

     */  

    @Override  

    public boolean lock(String key) {  

        while(true) {  

            // 当前加锁时间  

            currentLockTime = System.currentTimeMillis();  

              

            if(redisComp.setIfAbsent(key, currentLockTime)) {  

                // 获取锁成功  

                logger.debug("直接获取锁{key: {}, currentLockTime: {}}", key, currentLockTime);  

                return true;  

            } else {  

                //其他线程占用了锁  

                logger.debug("检测到锁被占用{key: {}, currentLockTime: {}}", key, currentLockTime);  

                Long otherLockTime = redisComp.get(key);  

                if(otherLockTime == null) {  

                    // 其他系统释放了锁  

                    // 立刻重新尝试加锁  

                    logger.debug("检测到锁被释放{key: {}, currentLockTime: {}}", key, currentLockTime);  

                    continue;  

                } else {  

                    if(currentLockTime - otherLockTime = overtime) {  

                        //锁超时  

                        //尝试更新锁  

                        logger.debug("检测到锁超时{key: {}, currentLockTime: {}, otherLockTime: {}}", key, currentLockTime, otherLockTime);  

                        Long otherLockTime2 = redisComp.getAndSet(key, currentLockTime);  

                        if(otherLockTime2 == null || otherLockTime.equals(otherLockTime2)) {  

                            logger.debug("获取到超时锁{key: {}, currentLockTime: {}, otherLockTime: {}, otherLockTime2: {}}", key, currentLockTime, otherLockTime, otherLockTime2);  

                            return true;  

                        } else {  

                            sleep();  

                            //重新尝试加锁  

                            logger.debug("重新尝试加锁{key: {}, currentLockTime: {}}", key, currentLockTime);  

                            continue;  

                        }  

                    } else {  

                        //锁未超时  

                        sleep();  

                        //重新尝试加锁  

                        logger.debug("重新尝试加锁{key: {}, currentLockTime: {}}", key, currentLockTime);  

                        continue;  

                    }  

                }  

            }  

        }  

    }  

  

    /* (non-Javadoc) 

     * @see com.iol.common.util.concurrent.locks.IRedisLockArithmetic#unLock(java.lang.String) 

     */  

    @Override  

    public boolean unLock(String key) {  

        logger.debug("解锁{key: {}}", key);  

        redisComp.delete(key);  

        return true;  

    }  

      

    /** 

     * 休眠br / 

     * @param sleeptime 

     */  

    private void sleep() {  

        try {  

            Thread.sleep(sleeptime);  

        } catch (InterruptedException e) {  

            throw new LockException("线程异常中断", e);  

        }  

    }  

}

如何在java中使用redis

public class RedisListJava {

   public static void main(String[] args) {

      //连接本地的 Redis 服务

      Jedis jedis = new Jedis("localhost");

      System.out.println("Connection to server sucessfully");

      //存储数据到列表中

      jedis.lpush("tutorial-list", "Redis");

      jedis.lpush("tutorial-list", "Mongodb");

      jedis.lpush("tutorial-list", "Mysql");

     // 获取存储的数据并输出

     ListString list = jedis.lrange("tutorial-list", 0 ,5);

     for(int i=0; ilist.size(); i++) {

       System.out.println("Stored string in redis:: "+list.get(i));

     }

 }

}

java链接r的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java链接redis 主节点挂了、java链接r的信息别忘了在本站进行查找喔。