Redis本地/遠程(外部)連接失敗問題及解決
問題現(xiàn)象
今天在 192.168.2.220(windows服務器)上安裝并啟動了一個 Redis服務,如下:
點擊 redis-server.exe:
啟動成功:
然后在192.168.2.101(本地) 連接 192.168.2.220 的 Redis服務,出現(xiàn)報錯,如下:
隨后,啟動本地的java項目,配置 Redis,如下:
然后訪問需要使用到 Redis服務 的接口,出現(xiàn)如下報錯:
問題分析
1.報錯信息
根據(jù)報錯信息可知,大概意思就是說:
該 Redis連接 是以 “protected” 模式(mode),該模式具有以下的特點:沒有綁定可具體的ip地址,訪問cli工具不需要認證密碼,該模式下只支持“loopback”(回環(huán))接口的調(diào)用。
//注:回環(huán)的意思大概就是說,只能在配置了redis的機器上訪問redis連接,而不允許外部ip連接。
如果你想要連接該redis服務,你需要采用以下其中一種解決方法:
方案1.2.3:前三種的意思幾乎一致,都是說讓你去修改該 Redis的配置 ,讓Redis以“protected-mode no”的配置來啟動。
方案4:修改該 Redis的配置,讓Redis綁定一個ip地址或一個認證密碼。
2.知識點分析
2.1Redis 的配置文件的區(qū)別
可以看到有兩個配置文件:
那該使用哪個呢?那就來說說 redis.windows.conf 和 redis.windows-service.conf 的區(qū)別:
查閱網(wǎng)上資料發(fā)現(xiàn),網(wǎng)上流傳著這樣的說法:“當redis安裝后,就會在系統(tǒng)服務中出現(xiàn)一個名為Redis的服務,通過點擊啟動來啟動Redis”
通過 win+r 中,輸入 compmgmt.msc ,打開管理工具點擊服務,可以找到redis服務,然后看見類似下圖:
通過這個圖片可以看到,這個名為Redis的系統(tǒng)服務,默認是使用了 “redis.windows-service.conf ” 這個配置文件來啟動的。
奇怪的是我看了一下卻沒有Redis這個系統(tǒng)服務。。。。。。好吧,有可能是Redis的版本的問題:
問題不大,因為我們其實完全就沒必要把redis變成一個系統(tǒng)服務,從而實現(xiàn)開機自啟動(后臺);我覺得想用的時候,直接點擊 redis-server.exe 啟動 不香么???
現(xiàn)在要思考的問題其實是:當我們點擊 redis-server.exe 啟動 Redis 時,會不會也是使用了 “redis.windows-service.conf ” 這個配置文件來啟動的呢?
我猜想:redis-server.exe 啟動 Redis 時是使用“redis.windows.conf ”這個配置文件來啟動的,否則,這個文件就沒有存在的意義了。
搜了很久,沒有在網(wǎng)上找到對應的資料,于是就自己來實驗一下吧?。。。。。?/p>
2.2Redis 的 bind 配置
首先我們打開 redis.windows-service.conf,可以看見默認綁定了127.0.0.1(本地ip地址)
redis 中的 bind 配置作用就是:
- 配置該redis連接 的 固定ip,配置完之后,就只有它綁定的那這個 ip 能訪問到該redis連接;其他ip就不能。
- 而由于 redis 默認綁定了 127.0.0.1 ,也就是只有 127.0.0.1 所映射的(192.168.2.220)這個ip能訪問該 redis,其他ip就不能;
- 因此這個配置會阻礙外部(192.168.2.101)對該 redis的訪問。
2.3Redis 的 protected-mode 配置
在 “redis.windows-service.conf ” 文件中,可以找到如下配置:
通過查看注解,我們可以知道:
- 該配置是默認啟動(enabled)的;
- 如果你想讓其他主機(ip)連接該redis,則必須設置該配置為不可用的(disable),即使你不配置認證密碼,也沒有 通過 bind 配置綁定外部ip地址
- 由此可知:該配置就是用于限制外部ip訪問的,且要和 bind 配置一起使用。
心得
從上面的知識點可知,要解決問題,就需要對 redis的配置文件中的 bind 和 protected-mode 配置進行修改。
配置步驟
步驟1:打開 “redis.windows-service.conf ” 文件,為Redis綁定一個ip地址:
//注:我們一般都不需要在訪問redis時使用到認證密碼,所以沒有要求的話,可以不配置
把該bing 配置(bind 127.0.0.1)注釋掉,這樣就能讓所有ip都能訪問到這個redis,修改如下:
步驟2:打開 “redis.windows-service.conf ” 文件,修改Redis的 protected-mode 配置:
下拉,找到 protected-mode 配置,修改為如下:
然后把原來的redis服務關閉,再點擊redis-server.exe 啟動。
然后再在本地(192.168.2.101)連接 192.168.2.220 的 Redis服務,出現(xiàn)如下報錯:
再調(diào)用接口試試,發(fā)現(xiàn)還是報錯:
好了,接下來就是驗證實驗的時刻了
1. 關閉redis窗口,將“redis.windows-service.conf ” 還原成初始狀態(tài);
2. 將以上步驟應用到 “redis.windows.conf” 這個配置文件上;
3. 點擊 redis-server.exe 啟動;
發(fā)現(xiàn)還是會報同樣的錯誤,那就不知道是為什么了。。。尷尬
于是,我又把“redis.windows.conf” 和 “redis.windows-service.conf ” 兩個配置文件都做了修改,然后再點擊 redis-server.exe 啟動,結果還是不行;
這樣就不好說問題出在哪里,但是能確定的是:這兩個配置文件的修改都沒有生效?。。。。?!
必殺技
自己寫個啟動腳本(redis-start.bat),配置redis的啟動命令并指定了配置文件,來啟動redis,終于可以了:
雙擊 “redis-start.bat” 文件
啟動成功:
接口調(diào)用成功:
注意:這里不要指定 “redis.windows-service.conf ” 配置文件,否則會出現(xiàn)以下情況:
雖然啟動了,但是一片黑暗,啥信息都看不到,由此似乎可以證明了我的猜想:
redis-server.exe 啟動 Redis 時是使用“redis.windows.conf ”這個配置文件來啟動的
因為,redis-server.exe 啟動 Redis 時,是有信息可以看見的,所以說 :
“redis.windows-service.conf ” 這個配置文件,應該是用來將Redis配置成一個windows系統(tǒng)服務而存在的?。?!
總之,最靠譜的方法,還是用腳本啟動!??!
解決方法
1. 打開 “redis.windows???????” 文件,把該bing 配置(bind 127.0.0.1)注釋掉:
2. 修改Redis的 protected-mode 配置 為 protected-mode no ,如下:
3. 創(chuàng)建啟動腳本文件(redis-start.bat),寫入啟動命令并指定配置文件:
4. 雙擊 “redis-start.bat” 文件啟動:
5. 訪問接口成功:
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Redis遍歷海量數(shù)據(jù)集的幾種實現(xiàn)方法
Redis作為一個高性能的鍵值存儲數(shù)據(jù)庫,廣泛應用于各種場景,包括緩存、消息隊列、排行榜,本文主要介紹了Redis遍歷海量數(shù)據(jù)集的幾種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02在Redis數(shù)據(jù)庫中實現(xiàn)分布式速率限制的方法
這篇文章主要介紹了在Redis數(shù)據(jù)庫中實現(xiàn)分布式速率限制的方法,文中展示了一個用Python編寫的應用示例,需要的朋友可以參考下2015-06-06Redis+threading實現(xiàn)多線程消息隊列的使用示例
Redis多線程消息隊列是一種使用Redis作為存儲后端的消息隊列實現(xiàn),它利用Redis的線程并發(fā)處理能力來提高消息隊列的處理效率,本文主要介紹了Redis+threading實現(xiàn)多線程消息隊列的使用示例,感興趣的可以了解一下2023-12-12