Redis学习02——Jedis使用
来源:互联网 发布:怎么修复excel软件 编辑:程序博客网 时间:2024/06/05 18:25
- Redis学习02Jedis使用
- 一准备jar包
- 二创建第一实例程序
- 三配置服务器
- 1 connect timed out
- 11 异常
- 12 解决方式
- 2 javanetConnectException Connection refused connect
- 21 异常
- 22 解决方式
- 1 connect timed out
- 四打印结果
- 五使用连接池
- 1 代码
- 2 结果
- 六使用配置的使用连接池
- 1 redisproperties
- 2 JedisPoolUtils 连接池工具类
- 3 测试代码
- 4 结果
Redis学习02——Jedis使用
一、准备jar包
我们需要使用到的jar包如下
jedis.jar
common-pool
下载地址如下
http://central.maven.org/maven2/redis/clients/jedis/2.9.0/
http://commons.apache.org/proper/commons-pool/download_pool.cgi
二、创建第一实例程序
private String ipAddress = "172.16.50.145";private int port = 6379;@Testpublic void test1(){ //1.获取链接对象 Jedis jedis = new Jedis(ipAddress,port); //2.获得数据 String username = jedis.get("username"); System.out.println(username); //3.存储 jedis.set("addr","上海"); System.out.println(jedis.get("addr")); jedis.close();}
但是如果你运行你会发现是报超时错,这是因为linux默认没有打开我们的6379端口。具体配置请看下面。
三、配置服务器
3.1 connect timed out
3.1.1 异常
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out at redis.clients.jedis.Connection.connect(Connection.java:207) at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) at redis.clients.jedis.Connection.sendCommand(Connection.java:126) at redis.clients.jedis.Connection.sendCommand(Connection.java:117) at redis.clients.jedis.Jedis.get(Jedis.java:152) at com.qwm.redis.Demo1.test1(Demo1.java:25) 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.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:292) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)Caused by: java.net.SocketTimeoutException: connect timed out 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:184) ... 27 more
3.1.2 解决方式
这个是由于linux默认是没有允许访问 6379 端口的,我们需要配置可以访问这个端口。
使用 vim 修改 /etc/sysconfig/iptables
# sample configuration for iptables service# you can edit this manually or use system-config-firewall# please do not ask us to add additional ports/services to this default configuration*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT
加上一行
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
例如
# sample configuration for iptables service# you can edit this manually or use system-config-firewall# please do not ask us to add additional ports/services to this default configuration*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT
保存重启 iptables
[root@wiming ~]# service iptables restartRedirecting to /bin/systemctl restart iptables.service
3.2 java.net.ConnectException: Connection refused: connect
3.2.1 异常
redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect at redis.clients.jedis.Connection.connect(Connection.java:207) at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) at redis.clients.jedis.Connection.sendCommand(Connection.java:126) at redis.clients.jedis.Connection.sendCommand(Connection.java:117) at redis.clients.jedis.Jedis.get(Jedis.java:152) at com.qwm.redis.Demo1.test1(Demo1.java:25) 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.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:292) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)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:184) ... 27 more
3.2.2 解决方式
第一步:
注释 redis.conf 中的 bind 127.0.0.1,还是一样使用vim 打开配置文件。找到 69行,修改如下
67 # JUST COMMENT THE FOLLOWING LINE.68 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~69 # bind 127.0.0.1
保存,重启redis,在看可一看是时候已经ok了,如果不行,再看第二步
第二步:
修改 redis.conf 中的 88 行**protected-mode no
**,yes 改为no
86 # even if no authentication is configured, nor a specific set of interfaces87 # are explicitly listed using the "bind" directive.88 protected-mode no
保存重启redis,现在就ok了。
四、打印结果
wiming上海
五、使用连接池
5.1 代码
@Testpublic void test2(){ //1.创建连接池的配置对象 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(30);//最大闲置个数 config.setMinIdle(10);//最小闲置个数 config.setMaxTotal(50);//最大连接数 //2.创建连接池 JedisPool pool = new JedisPool(config,ipAddress,port); //3.从连接池子中获取redis连接 Jedis jedis = pool.getResource(); //4.操作数据库 System.out.println(jedis.get("username")); //5.关闭资源 jedis.close(); pool.close();}
5.2 结果
wiming
六、使用配置的使用连接池
我们可以使配置的方式来设置连接池的配置。选用 properties 相对简单好多,所以我们使用这个。
6.1 redis.properties
在src下创建 redis.properties
//最大闲置个数redis.maxIdle=30//最小闲置个数redis.minIdle=10//最大连接数redis.maxTotal=50//主机redis.host=172.16.50.145//端口redis.port=6379
6.2 JedisPoolUtils 连接池工具类
package com.qwm.redis;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/** * @author:qiwenming * @date:2017/9/24 0024 19:43 * @description: * redis连接池工具类 */public class JedisPoolUtils { private static JedisPool pool = null; static { //加载配置文件 InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties"); Properties pro = new Properties(); try { pro.load(in); //最大闲置个数 int maxIdle = Integer.parseInt(pro.getProperty("redis.maxIdle")); //最小闲置个数 int minIdle = Integer.parseInt(pro.getProperty("redis.minIdle")); //最大连接数 int maxTotal = Integer.parseInt(pro.getProperty("redis.maxTotal")); //主机 String host = pro.getProperty("redis.host"); //端口 int port = Integer.parseInt(pro.getProperty("redis.port")); //配置参数 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(maxIdle); poolConfig.setMinIdle(minIdle); poolConfig.setMaxTotal(maxTotal); pool = new JedisPool(poolConfig,host,port); } catch (IOException e) { e.printStackTrace(); } } /** * 获得jedis资源的方法 * @return */ public static Jedis getJedis(){ return pool.getResource(); }}
6.3 测试代码
package com.qwm.redis;import org.junit.Test;import redis.clients.jedis.Jedis;import java.util.Iterator;import java.util.Map;import java.util.Set;/** * @author:qiwenming * @date:2017/9/24 0024 20:00 * @description: */public class Demo2 { @Test public void test1(){ Jedis jedis = JedisPoolUtils.getJedis(); System.out.println(jedis.get("username")); jedis.hset("myhash","s","kkkkkkk"); jedis.hset("myhash","k","fdsafdsafds"); jedis.hset("myhash","v","fdsafdsafds"); //获取myhash中的全部数据 Map<String,String> map = jedis.hgetAll("myhash"); Set<Map.Entry<String,String>> kv = map.entrySet(); Iterator<Map.Entry<String,String>> iterator = kv.iterator(); //迭代 while(iterator.hasNext()){ Map.Entry<String,String> entry = iterator.next(); System.out.println(entry.getKey()+"---"+entry.getValue()); } }}
6.4 结果
wimingv---fdsafdsafdss---kkkkkkkk---fdsafdsafds
阅读全文
0 0
- Redis学习02——Jedis使用
- Redis的学习—jedis使用_(三)
- Redis客户端——Jedis使用
- Java中使用Jedis操作Redis—Redis快速入门
- Jedis学习使用(java操作redis)
- Redis 学习(四)Jedis使用
- java使用redis入门学习--Jedis
- 【redis】——jedis简单了解和使用
- Redis学习10之Jedis连接redis和使用
- Redis学习备忘 Jedis
- 【Redis】深入浅出Redis(三)——在项目中使用Jedis对Redis操作
- redis jedis使用总结
- redis jedis使用总结
- redis jredis jedis 使用
- 使用Jedis操作redis
- Jedis(Redis)使用示例
- 使用Jedis操作Redis
- 使用Jedis操作redis
- 基于Dubbo的分布式系统架构(三):安装dubbo监控中心
- leetcode 17. Letter Combinations of a Phone Number
- ACM-ICPC(2017)北京赛区网络赛-E-Territorial Dispute(计算几何->凸包)
- 调整数组顺序使奇数位于偶数前面
- NodeManager代码分析之NodeManager启动过程
- Redis学习02——Jedis使用
- mybatis入门基础(十)-----分页查询
- 算法练习(3)—— 栈
- 求排列的逆序数
- struts2写web层的项目,页面显示总是路径更改不了。或是路径改了,但效果运行不出来。【双清:ctrl+shift+delete清浏览器缓存;Tomcat 右键clean,清理Tomcat缓存。】
- wr720n v4 折腾笔记(三):网络配置与扩充USB
- 文章标题
- YARNMRv2 Node Manager深入剖析—NodeManager启动Container流程分析
- 购房卖方违约 买方如何维护自己的合法权益?