Linux操做系統並無打開6379端口,因此若是直接訪問會報錯,須要更改其防火牆配置,輸入;java
vim /etc/sysconfig/iptables
在配置中增長一條規則:redis
這樣就把6379端口打開了(能夠在上一條規則使用yy+p,把上條規則複製黏貼,而後再更改端口號,免去敲一大堆命令),改完記得使用 :wq 保存並退出。改後須要重啓防火牆,輸入:vim
service iptables restart
固然,也能夠直接關閉防火牆後進行訪問,就不會報鏈接超時的錯誤了segmentfault
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
package com.imooc.jedis; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * Jedis的測試 * @author xzf * */ public class JedisDemo1 { @Test /** * 單實例的測試 */ public void demo1(){ //1. 設置IP地址和端口 Jedis jedis=new Jedis("10.2.1.107",6379); jedis.auth("123456");//redis中設置了校驗密碼; //2. 保存數據 jedis.set("name", "imooc"); //3. 獲取數據 String value=jedis.get("name"); System.out.println(value); //4.釋放資源 jedis.close(); } @Test /** * 鏈接池方式鏈接 */ public void demo2(){ //獲取鏈接池的配置對象 JedisPoolConfig config=new JedisPoolConfig(); //設置最大鏈接數 config.setMaxTotal(30); //設置最大空閒鏈接數 config.setMaxIdle(10); //得到鏈接池(此處能夠考慮改爲單例模式,使用getInstance得到鏈接池對象) JedisPool jedisPool=new JedisPool(config,"10.2.1.107",6379); //得到核心對象 Jedis jedis=null; try { //經過鏈接池得到鏈接 jedis=jedisPool.getResource(); jedis.auth("123456"); //設置數據 jedis.set("name","張三"); String value=jedis.get("name"); System.out.println(value); } catch (Exception e) { e.printStackTrace(); }finally { //釋放資源 if (jedis!=null) { jedis.close();//將jedis還到鏈接池中,老版本的寫法jedisPool.returnResource已經被廢棄 } if (jedisPool!=null) { //關閉鏈接池(非必需) jedisPool.close(); } } } }
在redis安裝目錄中的redis.conf文件裏有這樣一行:服務器
這裏限制了只能(運行redis服務的)本機訪問,致使外部訪問的時候報以下錯誤:網絡
java.net.ConnectException: Connection refused: connecteclipse
添加校驗密碼,具體步驟以下:maven
1).將 bind 127.0.0.1這行註釋測試
2).設置校驗密碼。將 requirepass foobared 這行註釋去掉,設置成「requirepass 密碼」的格式,這裏密碼最好設成強密碼,複雜一些最好ui
或者經過redis命令來設置:
- [root@itcast01 redis-3.2.1]# redis-cli - 127.0.0.1:6379> config set requirepass 123456 - OK - 127.0.0.1:6379>
3).重啓redis
4).在代碼中獲取redis對象的時候,加上校驗密碼
5).若要在(安裝redis的)Linux主機中打開redis客戶端,須要輸入校驗密碼,以下圖,使用"auth 密碼"的形式便可,不然沒法使用redis命令,會報「NOAUTH Authentication required」的錯
以上只是一種解決方案,還有其餘方法:
方法1:將bind 127.0.0.1 改爲 bind 0.0.0.0,其餘項不用動(已試驗可行)
方法2: 將bind 127.0.0.1註釋,並關閉保護模式,即將下面圖中的yes改爲no(已試驗可行)
在eclipse中的maven資源目錄查看,jar包已經引入了,可是仍是報 「Missing artifact」 的錯誤
能夠參考另外一篇博客:http://www.javashuo.com/article/p-beyaozyf-mg.html
在網上查閱資料的時候,不少博客,好比下面這個:
http://blog.csdn.net/ksdb0468473/article/details/52848608,描述了經過直接添加一條"bind+ip"的方式使得外網可訪問,可是通過我親自試驗並不成功,結果不但安裝redis服務的本機鏈接不上redis,外部代碼訪問也會報錯,這裏記錄錯誤還原以下
a).redis.conf中添加一條bind+ip:
啓動後發現本機都連不上redis了:
b).外部代碼訪問出錯:
按照這篇博客http://blog.csdn.net/fxq8866/article/details/58238802的描述,說寫成下面這樣的形式,(ip之間用空格隔開)經我試驗也是不行的,錯誤同上
那麼,爲何這樣寫是不行的呢?經我多番查閱,發現原來有人和我遇到了同樣的問題,並在segmentfault上有提問(問題地址:Redis bind 多個 IP 出錯),這個問題下的回答指出,原來是你們對redis英文翻譯上出現了誤差,因而被帶偏了
找到以下解釋:
關於 bind
翻看網上的文章,此處多翻譯爲 「指定 redis 只接收來自於該 IP 地址的請求,若是不進行設置,那麼將處理全部請求,在生產環境中最好設置該項」。這種解釋會 totally 搞糊塗初學者,甚至是錯誤的。該處的英文原文爲
# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
# bind 127.0.0.1該處說明 bind 的是 interface,也就是說是網絡接口。服務器能夠有一個網絡接口 (通俗的說網卡),或者多個。打個比方說機器上有兩個網卡,分別爲 192.168.205.5 和 192.168.205.6,若是 bind 192.168.205.5,那麼只有該網卡地址接受外部請求,若是不綁定,則兩個網卡口都接受請求。
OK,不知道講清楚沒有,在舉一個例子。在我上面的實驗過程當中,我是將 bind 項註釋掉了,實際上我還有一種解決方案。因爲我 redis 服務器的地址是
192.168.1.4
。若是我不註釋 bind 項,還有什麼辦法呢?我能夠作以下配置:# bind 192.168.1.4
這裏不少人會誤覺得綁定的 ip 應該是請求來源的 ip。其實否則,這裏應該綁定的是你 redis 服務器自己接受請求的 ip。
原文連接:http://blog.csdn.net/hel12he/article/details/46911159
1.Jedis 鏈接虛擬機下的 Redis 服務(詳細,講的很好,裏面包括了jedis對redis各類數據類型的操做)
2.http://blog.csdn.net/ksdb0468473/article/details/52126474(這裏主要講了防火牆的問題)