精华内容
参与话题
问答
  • Jedis

    2019-11-03 20:16:24
    Jedis 操作 Redis 中的数据结构3.1 Jedis 操作 String3.2 Jedis 操作 Hash3.3 Jedis 操作 List3.4 Jedis 操作 Set3.5 Jedis 操作 SortedSet4. Jedis 的连接池4.1 Jedis 的连接池的入门使用4.2 Jedis 的连接池工具类...

    1. Jedis 的概念

    Jedis 是一款让我们用 Java 操作 Redis 数据库的工具(类似于 JDBC)

    2. Jedis 的入门使用

    1. 打开 Redis 的服务端和客户端

    2. 导入 Jedis 的 jar 包

      jedis-2.7.0.jar
      
    3. 创建测试类

      package com.zt.jedis.test;
      
      import org.junit.Test;
      import redis.clients.jedis.Jedis;
      
      public class JedisTest {
          @Test
          public void testJedis(){
              // 1. 获取连接
              Jedis jedis = new Jedis("localhost");
              
              // 2. 操作
              jedis.set("name","a");
              
              // 3. 关闭连接
              jedis.close();
          }
      }
      
      
    4. 在 Redis 客户端获取数据

      127.0.0.1:6379> keys *
      1) "name"
      127.0.0.1:6379> get name
      "a"
      

    3. Jedis 操作 Redis 中的数据结构

    3.1 Jedis 操作 String

    1. 方法

      1. set(String key, Stirng value):存储一个数据
      2. get(String key):获取一个元素
      3. setex(String key, int seconds, String value):存储一个指定过期时间的元素
    2. 代码

      public class JedisTest {
      
          @Test
          public void testString() throws InterruptedException {
              // 1. 获取连接
              Jedis jedis = new Jedis("localhost");
              
              // 2. 操作
              jedis.set("name","a");
              String name = jedis.get("name");
              System.out.println(name);
              jedis.setex("age",5,"18");
              System.out.println(jedis.get("age"));
              // 线程等待 10 秒
              Thread.sleep(10000);
              System.out.println(jedis.get("age"));
              
              // 3. 关闭连接
              jedis.close();
          }
      }
      
      

      运行结果

      a
      18
      null
      

    3.2 Jedis 操作 Hash

    1. 方法

      1. hset(String key, String field, String value):存储一个元素
      2. hget(String key, String field):获取一个元素
      3. hgetAll(String key):获取所有元素
    2. 代码

      public class JedisTest {
          @Test
          public void testHash() {
              // 1. 获取连接
              Jedis jedis = new Jedis("localhost");
      
              // 2. 操作
              jedis.hset("myHash", "name", "张三");
              jedis.hset("myHash", "age", "18");
              System.out.println(jedis.hget("myHash", "name"));
      
              Map<String, String> myHash = jedis.hgetAll("myHash");
              System.out.println(myHash);
      
              // 3. 关闭连接
              jedis.close();
          }
      }
      
      

      运行结果

      张三
      {name=张三, age=18}
      

    3.3 Jedis 操作 List

    1. 方法

      1. lpush(String key, String… value):将元素添加到列表左边
      2. rpush(String key, String… value):将元素添加到列表右边
      3. lpop(String key):删除列表最左边元素,并将元素返回
      4. rpop(String key):删除列表最右边元素,并将元素返回
      5. lrange(String key, long start, long end):获取指定范围元素
    2. 代码

      public class JedisTest {
          @Test
          public void testList() {
              // 1. 获取连接
              Jedis jedis = new Jedis("localhost");
      
              // 2. 操作
              jedis.lpush("myList", "a", "b", "c");
              jedis.rpush("myList", "a", "b", "c");
      
              List<String> myList = jedis.lrange("myList", 0, -1);
              System.out.println(myList);
      
      
              String lpop = jedis.lpop("myList");
              System.out.println(lpop);
              String rpop = jedis.rpop("myList");
              System.out.println(rpop);
      
              List<String> myList2 = jedis.lrange("myList", 0, -1);
              System.out.println(myList2);
      
      
              // 3. 关闭连接
              jedis.close();
          }
      }
      
      

      运行结果

      [c, b, a, a, b, c]
      c
      c
      [b, a, a, b]
      

    3.4 Jedis 操作 Set

    1. 方法

      1. sadd(String key, String… members):存储元素
      2. smembers(String key):获取所有元素
    2. 代码

      public class JedisTest {
      
          @Test
          public void testSet() {
              // 1. 获取连接
              Jedis jedis = new Jedis("localhost");
      
              // 2. 操作
              jedis.sadd("mySet","a","b","c");
              Set<String> mySet = jedis.smembers("mySet");
              System.out.println(mySet);
      
              // 3. 关闭连接
              jedis.close();
          }
      }
      
      

      运行结果

      [a, b, c]
      

    3.5 Jedis 操作 SortedSet

    1. 方法

      1. zadd(String key, double score, String member):存储一个元素
      2. zrange(String key, long start, long end):获取指定范围元素
    2. 代码

      public class JedisTest {
          @Test
          public void testSortedSet() {
              // 1. 获取连接
              Jedis jedis = new Jedis("localhost");
      
              // 2. 操作
              jedis.zadd("mySortedSet",30,"a");
              jedis.zadd("mySortedSet",40,"b");
              jedis.zadd("mySortedSet",20,"c");
      
              Set<String> mySortedSet = jedis.zrange("mySortedSet", 0, -1);
              System.out.println(mySortedSet);
      
              // 3. 关闭连接
              jedis.close();
          }
      }
      
      

      运行结果

      [c, a, b]
      

    4. Jedis 的连接池

    4.1 Jedis 的连接池的入门使用

    1. 导入 Jedis 和 Jedis 连接池的 jar 包

      commons-pool2-2.3.jar
      jedis-2.7.0.jar
      
    2. 测试类

      public class JedisTest {
          @Test
          public void testJedisPool(){
              // 1.创建连接池配置对象
              JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
              // 最大连接数
              jedisPoolConfig.setMaxTotal(50);
              // 最大空闲状态连接数
              jedisPoolConfig.setMaxIdle(10);
      
              // 2.创建 Jedis 连接池对象
              JedisPool jedisPool = new JedisPool(jedisPoolConfig,"localhost",6379);
      
              // 3.获取连接
              Jedis jedis = jedisPool.getResource();
      
              // 4.操作
              jedis.set("name", "a");
              System.out.println(jedis.get("name"));
      
              // 5.关闭连接
              jedis.close();
          }
      }
      
      

      运行结果

      a
      

    4.2 Jedis 的连接池工具类

    1. 将 Jedis 连接池的配置文件 jedis.properties 复制到 src 下

      #最大活动对象数     
      redis.pool.maxTotal=1000
      #最大能够保持idel状态的对象数      
      redis.pool.maxIdle=100
      #最小能够保持idel状态的对象数   
      redis.pool.minIdle=50
      #当池内没有返回对象时,最大等待时间    
      redis.pool.maxWaitMillis=10000
      #当调用borrow Object方法时,是否进行有效性检查    
      redis.pool.testOnBorrow=true
      #当调用return Object方法时,是否进行有效性检查    
      redis.pool.testOnReturn=true
      #“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.  
      redis.pool.timeBetweenEvictionRunsMillis=30000
      #向调用者输出“链接”对象时,是否检测它的空闲超时;  
      redis.pool.testWhileIdle=true
      # 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.  
      redis.pool.numTestsPerEvictionRun=50
      #redis服务器的IP    
      redis.ip=127.0.0.1
      #redis服务器的Port    
      redis1.port=6379
      
    2. 连接池工具类

      public class JedisPoolUtils {
          private static JedisPool jedisPool;
      
          // 配置连接池
          static {
              Properties properties = new Properties();
              InputStream resourceAsStream = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
              try {
                  properties.load(resourceAsStream);
              } catch (IOException e) {
                  e.printStackTrace();
              }
      
              JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
              jedisPoolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("redis.pool.maxTotal")));
              jedisPoolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("redis.pool.maxIdle")));
      
              jedisPool = new JedisPool(jedisPoolConfig, properties.getProperty("redis.ip"), Integer.parseInt(properties.getProperty("redis1.port")));
          }
      
          /**
           * 返回一个连接
           * @return
           */
          public static Jedis getJedis() {
              return jedisPool.getResource();
          }
      }
      
      
    3. 测试类

      public class JedisTest {
      	@Test
          public void testJedisPoolUtils() {
              // 1.获取连接
              Jedis jedis = JedisPoolUtils.getJedis();
      
              // 2.操作
              jedis.set("hello","world");
              System.out.println(jedis.get("hello"));
      
              // 3.关闭连接
              jedis.close();
          }
      }
      
      

      运行结果

      world
      
    展开全文
  • jedis

    2019-07-03 15:32:03
    jedis连接池: JedisPool * 使用: 1. 创建JedisPool连接池对象 2. 调用方法 getResource()方法获取Jedis连接 //0.创建一个配置对象 JedisPoolConfig config = new JedisPoolCo...

    jedis连接池: JedisPool
                * 使用:
                    1. 创建JedisPool连接池对象
                    2. 调用方法 getResource()方法获取Jedis连接
                       

     //0.创建一个配置对象
     JedisPoolConfig config = new JedisPoolConfig();
     config.setMaxTotal(50);
     config.setMaxIdle(10);
                
    //1.创建Jedis连接池对象
    JedisPool jedisPool = new JedisPool(config,"localhost",6379);
                
    //2.获取连接
    Jedis jedis = jedisPool.getResource();
    //3. 使用
    jedis.set("hehe","heihei");
                
                
    //4. 关闭 归还到连接池中
    jedis.close();


                
                * 连接池工具类
                 

       public class JedisPoolUtils {
    
                        private static JedisPool jedisPool;
                    
                        static{
                            //读取配置文件
                            InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
                            //创建Properties对象
                            Properties pro = new Properties();
                            //关联文件
                            try {
                                pro.load(is);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            //获取数据,设置到JedisPoolConfig中
                            JedisPoolConfig config = new JedisPoolConfig();
                            config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
                            config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
                    
                            //初始化JedisPool
                            jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
                    
                    
                    
                        }
                    
                    
                        /**
                         * 获取连接方法
                         */
                        public static Jedis getJedis(){
                            return jedisPool.getResource();
                        }
                    }

     

    展开全文
  • 30分钟手写Jedis

    万次阅读 2018-12-26 12:02:14
    请相信我,你一定会更优秀! 一张图带你理清思路: 请注意,所有CS架构的服务都离不开这三层。...传输层即连接层,我们使用 socket连接redis-server即可;API层就是供C使用的操作命令;协议层即CS之间的协议,我们...

    请相信我,你一定会更优秀!

    一张图带你理清思路:

    请注意,所有CS架构的服务都离不开这三层。通俗点讲就是,CS之间约定一个协议,只有符合此协议的数据信息S才会处理,同样,S会遵循此协议回复给C。传输层即连接层,我们使用 socket连接redis-server即可;API层就是供C使用的操作命令;协议层即CS之间的协议,我们必须知道它们之间的协议。


    目录

    第一步,解密Jedis Protocol

    第二步,手写Jedis传输层&API层

    第三步,手写Jedis协议层

    第四步,演示

    第一步,解密Jedis Protocol

    1. 我们自己模拟 redis-server;
    2. 使用官方Jedis发送请求,抓取报文信息;
    3. 分析报文信息,解密 protocol;

     按照此思路,逐一实现:

    1. 我们自己模拟 redis-server;

    package com.haolin.java.demos.jedis;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    
    public class MockRedisServer {
    
    	@SuppressWarnings("resource")
    	public static void main(String[] args) throws IOException {
    		
    		// 模拟redis-server服务
    		ServerSocket serverSocket = new ServerSocket(6399);
    		InputStream inputStream = serverSocket.accept().getInputStream();
    		byte[] bs = new byte[1024];
    		inputStream.read(bs);
    		// 打印请求信息
    		System.out.println(new String(bs, "UTF-8"));
    		
    	}
    }
    

    2. 使用官方Jedis发送请求,抓取报文信息;

    @Test
    public void testProtocol() {
    
    	// 使用刚刚开启的模拟服务
    	Jedis jedis = new Jedis("redis://localhost:6399");
    	jedis.set("iname", "zhanghaolin");
    	// jedis.get("iname");
    
    }
    

    3. 分析报文信息,解密 protocol;

    // 控制台输出
    // set("iname", "zhanghaolin") 
    *3
    $3
    SET
    $5
    iname
    $11
    zhanghaolin
    // 控制台输出
    // get("iname")
    *2
    $3
    GET
    $5
    iname

    我们执行 set,get发送的这些报文信息里边,$, * 这些都代表什么呢?官网摘抄如下 redis官方文档地址

    结合官网帮助,不难分析出报文信息:

    # set("iname", "zhanghaolin") 
    *3        # *代表下边$行个数
    $3        # $表示下边一行长度
    SET       # 命令
    $5
    iname
    $11
    zhanghaolin

    第二步,手写Jedis传输层&API层

    package com.haolin.hedis;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.Socket;
    
    import com.haolin.hedis.Protocol.Command;
    
    /**
     * 
     * @Description: 传输层/API层
     * @author zhanghaolin
     * @date 2019年5月8日 上午9:40:47
     */
    public class Hedis {
    
    	private final String  DEFAULT_HOST 	= "127.0.0.1";
    	private final Integer DEFAULT_PORT 	= 6379;
    	
    	private Socket 						connection;
    
    	private String 						host;
    
    	private Integer 					port;
    	
    	private InputStream 				inputStream;
    	
    	private OutputStream 				outputStream;
    
    	public Hedis() {
    		this.host = DEFAULT_HOST;
    		this.port = DEFAULT_PORT;
    
    		connect();
    	}
    	
    	public Hedis(String host, Integer port) {
    		this.host = host;
    		this.port = port;
    
    		connect();
    	}
    
    	public void set(String key, String value) {
    		Protocol.sendMessage(outputStream, Command.SET, SafeEncoder.castValue(key), SafeEncoder.castValue(value));
    	}
    	
    	public String get(String key) {
    		Protocol.sendMessage(outputStream, Command.GET, SafeEncoder.castValue(key));
    		String replyMessage = Protocol.getReplyMessage(inputStream);
    		String temp1 = replyMessage.substring(replyMessage.indexOf(Protocol.LINEFLAG), replyMessage.lastIndexOf(Protocol.LINEFLAG));
    		String temp2 = temp1.substring(replyMessage.indexOf(Protocol.LINEFLAG));
    		String temp3 = temp2.substring(replyMessage.indexOf(Protocol.LINEFLAG)).replace(Protocol.LINEFLAG, Protocol.EMPTY);
    		return temp3;
    	}
    	
    	public String incr(String key) {
    		Protocol.sendMessage(outputStream, Command.INCR, SafeEncoder.castValue(key));
    		String replyMessage = Protocol.getReplyMessage(inputStream);
    		return replyMessage.substring(replyMessage.indexOf(Protocol.MAOHAO), replyMessage.lastIndexOf(Protocol.LINEFLAG)).replace(Protocol.MAOHAO, Protocol.EMPTY);
    	}
    	
    	public String decr(String key) {
    		Protocol.sendMessage(outputStream, Command.DECR, SafeEncoder.castValue(key));
    		String replyMessage = Protocol.getReplyMessage(inputStream);
    		return replyMessage.substring(replyMessage.indexOf(Protocol.MAOHAO), replyMessage.lastIndexOf(Protocol.LINEFLAG)).replace(Protocol.MAOHAO, Protocol.EMPTY);
    	}
    	
    	public void del(String key) {
    		Protocol.sendMessage(outputStream, Command.DEL, SafeEncoder.castValue(key));
    	}
    	
    	private void connect() {
    		if (!isConnected()) {
    			try {
    				connection = new Socket(host, port);
    				inputStream = connection.getInputStream();
    				outputStream = connection.getOutputStream();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	private boolean isConnected() {
    		return connection != null && connection.isBound() && !connection.isClosed() && connection.isConnected()
    				&& !connection.isInputShutdown() && !connection.isOutputShutdown();
    	}
    
    	public void close() {
    		if (isConnected()) {
    			try {
    				outputStream.flush();
    				connection.close();
    			} catch (IOException ex) {
    				ex.printStackTrace();
    			} finally {
    				finallyClose(connection);
    			}
    		}
    	}
    
    	private void finallyClose(Socket connection) {
    		if (connection != null) {
    			try {
    				connection.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	public static class SafeEncoder {
    		
    		public static byte[] castValue(String value) {
    			if (value == null)
    				value = Protocol.EMPTY;
    			return value.getBytes();
    		}
    		
    		public static String castValue(final byte[] bs) {
    			try {
    				return new String(bs, Protocol.CHARSET);
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			}
    			return Protocol.EMPTY;
    		}
    
    	}
    	
    	// Setter Getter
    	public String getHost() {
    		return host;
    	}
    
    	public void setHost(String host) {
    		this.host = host;
    	}
    
    	public Integer getPort() {
    		return port;
    	}
    
    	public void setPort(Integer port) {
    		this.port = port;
    	}
    
    }
    

    第三步,手写Jedis协议层

    package com.haolin.hedis;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import com.haolin.hedis.Hedis.SafeEncoder;
    
    /**
     * 
     * @Description: 协议层
     * @author zhanghaolin
     * @date 2019年5月8日 上午9:41:26
     */
    public class Protocol {
    
    	public static final String CHARSET  = "UTF-8";
    	
    	public static final String HEAD		= "*";
    	public static final String DOLLARS 	= "$";
    	public static final String MAOHAO 	= ":";
    	public static final String LINEFLAG = "\r\n";
    	public static final String EMPTY	= "";
    
    	public enum Command {
    		SET, GET, INCR, DECR, HSET, DEL
    	}
    
    	public static void sendMessage(OutputStream outputStream, Command commond, byte[]... bs) {
    		
    		String msg = buildSendMessage(commond, bs);
    		try {
    			outputStream.write(SafeEncoder.castValue(msg));
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    	}
    	
    	public static String getReplyMessage(InputStream inputStream) {
    		
    		byte[] reply = new byte[1024];
    		try {
    			inputStream.read(reply);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    		return new String(reply);
    	}
    	
    	public static String buildSendMessage(Command commond, byte[]... bs) {
    		
    		StringBuilder msg = new StringBuilder();
    		msg.append(HEAD).append(bs.length + 1).append(LINEFLAG);
    		msg.append(DOLLARS).append(commond.toString().length()).append(LINEFLAG);
    		msg.append(commond).append(LINEFLAG);
    		for (int i = 0; i < bs.length; i++) {
    			msg.append(DOLLARS).append(bs[i].length).append(LINEFLAG);
    			msg.append(SafeEncoder.castValue(bs[i])).append(LINEFLAG);
    		}
    		return msg.toString();
    		
    	}
    
    }

    第四步,演示

    为了更好的查看效果,我先进行清库

    执行 set,get

    package com.jedis.test;
    
    import org.junit.Test;
    import com.haolin.java.demos.jedis.Hedis;
    
    public class HedisTest {
    
    	@Test
    	public void testJedis() {
    		// 使用我们手写的Hedis
    		Hedis hedis = new Hedis();
    		hedis.set("name", "Hello uuimi");
    		
    		String value = hedis.get("name");
    		System.out.println(value);
    
    	}
    
    }
    

    控制台输出:

    Hello uuimi

    查看redis-server:

    完工。

     努力改变自己和身边人的生活。

    特别希望本文可以对您有所帮助,转载请注明出处。感谢大家留言讨论交流。 

    展开全文
  • 每次都在第8次获取 jedis的时候 获取不到 ``` package com.ryx.sync.util; import java.util.concurrent.locks.ReentrantLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis....
  • Redis的常见的异常如下: Cannot get Jedis connection;

    初学Redis时常见的异常:Cannot get Jedis connection

    org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:140)
    	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:229)
    	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:57)
    	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:128)
    	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:91)
    	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:78)
    	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:177)
    	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:152)
    	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:85)
    	at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:169)
    	at com.sunhui.redis.test.RedisDemo.redisDemo(RedisDemo.java:18)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
    	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:167)
    	at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)
    	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)
    	at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
    	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
    	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    	at java.util.Iterator.forEachRemaining(Iterator.java:116)
    	at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
    	at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
    	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
    	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    	at java.util.Iterator.forEachRemaining(Iterator.java:116)
    	at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
    	at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
    	at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:86)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
    Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    	at redis.clients.util.Pool.getResource(Pool.java:42)
    	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:133)
    	... 63 more
    Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
    	at redis.clients.jedis.Connection.connect(Connection.java:142)
    	at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:75)
    	at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1724)
    	at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:65)
    	at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:836)
    	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:434)
    	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)
    	at redis.clients.util.Pool.getResource(Pool.java:40)
    	... 64 more
    Caused by: java.net.ConnectException: Connection refused: connect
    	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    	at java.net.Socket.connect(Socket.java:589)
    	at redis.clients.jedis.Connection.connect(Connection.java:137)
    	... 71 more

    原因及解决方法如下:

        一、原因:Redis没有启动

            以Windows系统为例:点击startup.cmd

            出现上图界面,说明redis启动成功!


        二、原因:防火墙没有关闭

            控制面板--->Windows防火墙--->打开或关闭Windows防火墙--->关闭即可


     

        三、原因:客户端去redis服务器拿连接时,连接池中无可用连接

              调整JedisPoolConfig中maxActive的值

    	<!-- 使用Spring配置JedisPoolConfig对象 -->
    	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    		<!-- 最大空闲数 -->
    	        <property name="maxIdle" value="300" />
    		<!-- 最大连接数 -->
    		<property name="maxTotal" value="100" />
    		<!-- 最大等待时间 -->
    		<property name="maxWaitMillis" value="20000" />
    	</bean>
       使用Spring配置JedisPoolConfig对象
    	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    		<!-- 最大空闲数 -->
    	        <property name="maxIdle" value="300" />
    		<!-- 最大连接数 -->
    		<property name="maxTotal" value="100" />
    		<!-- 最大等待时间 -->
    		<property name="maxWaitMillis" value="20000" />
    	</bean>

            话不多说,上完整代码(applicationContext.xml):

    <?xml version="1.0" encoding="UTF-8"?><!-- 当前的XML文档版本与字符编码 -->
    <!-- xmlns:自定义标记及XML编写规范的命名空间。 -->
    <!-- xmlns:xsi:指当前XML文档应遵守的W3C国际组织定义的XML编写规范 -->
    <!-- xsi:schemaLocation: 指定某命名空间所使用的schema约束文件路径。 -->
    <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:context="http://www.springframework.org/schema/context"
            xmlns:aop="http://www.springframework.org/schema/aop"
            xmlns:tx="http://www.springframework.org/schema/tx"
            xmlns:mvc="http://www.springframework.org/schema/mvc"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    		
    
    	<!-- 使用Spring配置JedisPoolConfig对象 -->
    	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    		<!-- 最大空闲数 -->
    		<property name="maxIdle" value="300" />
    		<!-- 最大连接数 -->
    		<property name="maxTotal" value="100" />
    		<!-- 最大等待时间 -->
    		<property name="maxWaitMillis" value="20000" />
    	</bean>
    	
    	<!-- 配置JedisConnectionFactory -->
    	<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    		<!-- hostName:服务器  默认值是localhost -->
    		<property name="hostName" value="localhost" />
    		<!-- Port:端口号  默认值是6379 -->
    		<property name="port" value="6379" />
    		<!-- password:连接redis时所需要的密码 -->
    		<!-- <property name="password" value="password" /> -->
    		<!-- poolConfig:连接池配置对象 -->
    		<property name="poolConfig" ref="poolConfig" />
    	</bean>
    	
    	<!-- 配置SpringRedisTemplate -->
    	<bean id="jdkSerializationRedisSerializer" 
    	class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer">
    	</bean>
    	
    	<bean id="stringRedisSerializer" 
    	class="org.springframework.data.redis.serializer.StringRedisSerializer">
    	</bean>
    	
    	<bean id="redisTemplate"  class="org.springframework.data.redis.core.RedisTemplate">
    		<property name="connectionFactory" ref="connectionFactory" />
    		<property name="keySerializer" ref="stringRedisSerializer" />
    		<property name="valueSerializer" ref="jdkSerializationRedisSerializer" />
    	</bean>
    
    </beans>
    <property name="maxIdle" value="300" />
    		<!-- 最大连接数 -->
    		<property name="maxTotal" value="100" />
    		<!-- 最大等待时间 -->
    		<property name="maxWaitMillis" value="20000" />
    	</bean>
    	
    	<!-- 配置JedisConnectionFactory -->
    	<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    		<!-- hostName:服务器  默认值是localhost -->
    		<property name="hostName" value="localhost" />
    		<!-- Port:端口号  默认值是6379 -->
    		<property name="port" value="6379" />
    		<!-- password:连接redis时所需要的密码 -->
    		<!-- <property name="password" value="password" /> -->
    		<!-- poolConfig:连接池配置对象 -->
    		<property name="poolConfig" ref="poolConfig" />
    	</bean>
    	
    	<!-- 配置SpringRedisTemplate -->
    	<bean id="jdkSerializationRedisSerializer" 
    	class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer">
    	</bean>
    	
    	<bean id="stringRedisSerializer" 
    	class="org.springframework.data.redis.serializer.StringRedisSerializer">
    	</bean>
    	
    	<bean id="redisTemplate"  class="org.springframework.data.redis.core.RedisTemplate">
    		<property name="connectionFactory" ref="connectionFactory" />
    		<property name="keySerializer" ref="stringRedisSerializer" />
    		<property name="valueSerializer" ref="jdkSerializationRedisSerializer" />
    	</bean>
    
    </beans>
    

    小结:这只是本人遇到的几种情况,大家遇到其他的问题,欢迎分享,一起学习,一起进步,淦!

    展开全文
  • jedis-2.9.0.jar

    2017-09-25 14:08:06
    jedis-2.9.0.jar jedis-2.9.0 jar 包,不包含源码,源码下载地址: http://download.csdn.net/download/tan3739/9993938 测试代码: 导入依赖包: commons-lang-2.5.jar commons-pool2-2.4.2.jar jedis-2.9.0 jar ...
  • jedis jedis.jar

    热门讨论 2013-01-15 17:22:46
    jedis jar包; 版本:2.0 2.1
  • protected JedisPool jedisPool; protected void fromRedis(String idName,Queue<Long> queue){ try { jedis = jedisPool.getResource(); Map,String> model = jedis.hgetAll(idName); Long ...
  • Jedis 源码阅读一 —— Jedis

    千次阅读 2016-01-17 00:21:52
    这是jedis 源码目录,我们接下来选择性阅读重要的接口以及实现。└─redis └─clients ├─jedis │ │ BinaryClient.java │ │ BinaryJedis.java │ │ BinaryJedisCluster.java │ │ BinaryJedisPubS
  • jedis介绍

    千次阅读 2017-01-21 00:04:26
    jedis是redis的java版本的客户端实现。下面演示jedis的相关操作:    首先在eclipse新建动态web工程:        将jedis所需的jar包导入到工程中:        编写Java代码测试连通性:import redis.clients...
  • jedis连接不上redis集群

    2016-07-22 06:57:28
    JedisCluster jedisCluster = new JedisCluster(nodes,conf); //Set<String> hkeys = jedisCluster.hkeys("*"); //使用集群对象设置值 jedisCluster.set("money1", "180"); //使用集群对象获取值 ...

空空如也

1 2 3 4 5 ... 20
收藏数 16,916
精华内容 6,766
热门标签
关键字:

jedis