redis在Linux上的安裝和jedis簡單使用

来源:http://www.cnblogs.com/dijia478/archive/2017/12/10/8016993.html
-Advertisement-
Play Games

一、redis的安裝 這裡演示的版本是Redis4.0.6,Linux系統是CentOS6.7,Jdk1.7,Jedis2.8.1 這是官方文檔介紹的安裝方式 下載,解壓,編譯: 二進位文件是編譯完成後在src目錄下,通過下麵的命令啟動Redis服務: 你可以使用內置的客戶端命令redis-cli進 ...


一、redis的安裝

這裡演示的版本是Redis4.0.6,Linux系統是CentOS6.7,Jdk1.7,Jedis2.8.1

這是官方文檔介紹的安裝方式

下載,解壓,編譯:

$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz
$ tar xzf redis-4.0.6.tar.gz
$ cd redis-4.0.6
$ make

二進位文件是編譯完成後在src目錄下,通過下麵的命令啟動Redis服務:

$ src/redis-server

你可以使用內置的客戶端命令redis-cli進行使用:

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

 

當然,個人不建議直接使用源碼文件中的服務,make編譯完成後,可以安裝到指定目錄:

make PREFIX=/usr/local/redis install

 現在去剛剛tar包解壓出來的源碼目錄中,拷貝一個redis.conf配置文件,放到/usr/local/redis/bin/目錄下

 以後在這個目錄下使用就好了

 

啟動服務(暫時不使用自己剛纔複製過來的redis.conf配置文件)

./redis-server

服務端啟動成功

啟動客戶端(暫時不設置ip,埠號和密碼)

./redis-cli

客戶端啟動成功

二、Java程式中jedis操作redis

上面的方式只是一種小練習,我們現在通過Java程式用jedis來操作Linux伺服器上的redis。

用maven來引入jedis:

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.8.1</version>
        </dependency>
    </dependencies>

Java代碼:

    public static void main(String[] args) {
      // 虛擬機設置的ip,redis預設埠號
        Jedis jedis = new Jedis("192.168.133.128", 6379);
        jedis.set("key01", "zhangsan");
        jedis.set("key02", "lisi");
        System.out.println(jedis.get("key01"));
    }

註意上面的代碼是有問題的!

三、redis配置文件

上面的代碼運行後,會報錯

redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect

連接超被拒絕了,這是因為,redis的訪問ip預設是127.0.0.1

你需要在自己拷貝的redis.conf配置文件中修改:

文檔很長,可以通過"/"命令來查找"bind"字元串,按n搜索下一個

:/bind

把綁定的主機ip添加進去,之後啟動redis服務的時候,需要手動載入配置文件

我的配置文件放在了和server服務的同一個目錄里,所以啟動服務時輸入:

./redis-server redis.conf

註意啊:如果不輸入後面的配置文件目錄,那麼該配置文件不起作用,會提示說啟動預設的配置文件。

 

之後再次運行Java代碼

又報錯!!

redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

這錯報的好長。。

好心的博主幫你谷歌翻譯了一下。

簡單來說呢?就是給你提供了幾個解決方案

1)只需禁用保護模式,即可通過從同一主機連接到Redis,從回送介面發送命令“CONFIG SET protected-mode no”正在運行,但是如果您這樣做,請勿使用互聯網公開訪問互聯網。使用CONFIG REWRITE使此更改永久。

2)或者,您可以通過編輯Redis配置文件並將protected mode選項設置為“no”來禁用保護模式,然後重新啟動伺服器。

3)如果您只是為了測試而手動啟動伺服器,請使用“ --protected-mode no”選項重新啟動伺服器。

4)設置綁定地址或認證密碼。

這是redis4.0版本的新特性,redis3不會報錯。

在這裡我選擇設置redis密碼,同樣打開redis.conf配置文件,設置密碼為123456,保存退出

然後啟動伺服器

之後你要想在Linux里用命令打開redis客戶端,需要輸入一些參數

很顯然,-h是redis服務綁定的主機ip,-p是redis服務的埠號,-a是redis服務的密碼,都可以在redis.conf里更改的

然後就好了

這個時候,Java代碼中的問題還沒解決完,運行還會報錯的,沒有訪問許可權

redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.

你還需要在Java代碼中增加一條密碼設置

    public static void main(String[] args) {
        // 虛擬機的設置的ip,,redis預設埠號
        Jedis jedis = new Jedis("192.168.133.128", 6379);
        // redis訪問密碼
        jedis.auth("123456");
        jedis.set("key01", "zhangsan");
        jedis.set("key02", "lisi");
        System.out.println(jedis.get("key01"));
    }

OK,運行正常

分享一個redis詳細學習教程的網址:

http://www.runoob.com/redis/redis-intro.html

redis.conf 配置項說明如下:

1. Redis預設不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程,可以後臺啟動,用ps -ef | grep redis查看redis進程

    daemonize no

2. 當Redis以守護進程方式運行時,Redis預設會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定

    pidfile /var/run/redis.pid

3. 指定Redis監聽埠,預設埠為6379,作者在自己的一篇博文中解釋了為什麼選用6379作為預設埠,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自義大利歌女Alessia Merz的名字

    port 6379

4. 綁定的主機地址

    bind 127.0.0.1

5.當 客戶端閑置多長時間後關閉連接,如果指定為0,表示關閉該功能

    timeout 300

6. 指定日誌記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,預設為verbose

    loglevel verbose

7. 日誌記錄方式,預設為標準輸出,如果配置Redis為守護進程方式運行,而這裡又配置為日誌記錄方式為標準輸出,則日誌將會發送給/dev/null

    logfile stdout

8. 設置資料庫的數量,預設資料庫為0,可以使用SELECT <dbid>命令在連接上指定資料庫id

    databases 16

9. 指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合

    save <seconds> <changes>

    Redis預設配置文件中提供了三個條件:

    save 900 1

    save 300 10

    save 60 10000

    分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。

10. 指定存儲至本地資料庫時是否壓縮數據,預設為yes,Redis採用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致資料庫文件變的巨大

    rdbcompression yes

11. 指定本地資料庫文件名,預設值為dump.rdb

    dbfilename dump.rdb

12. 指定本地資料庫存放目錄

    dir ./

13. 設置當本機為slav服務時,設置master服務的IP地址及埠,在Redis啟動時,它會自動從master進行數據同步

    slaveof <masterip> <masterport>

14. 當master服務設置了密碼保護時,slav服務連接master的密碼

    masterauth <master-password>

15. 設置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,預設關閉

    requirepass foobared

16. 設置同一時間最大客戶端連接數,預設無限制,Redis可以同時打開的客戶端連接數為Redis進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息

    maxclients 128

17. 指定Redis最大記憶體限制,Redis在啟動時會把數據載入到記憶體中,達到最大記憶體後,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大記憶體設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區

    maxmemory <bytes>

18. 指定是否在每次更新操作後進行日誌記錄,Redis在預設情況下是非同步的把數據寫入磁碟,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為 redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於記憶體中。預設為no

    appendonly no

19. 指定更新日誌文件名,預設為appendonly.aof

     appendfilename appendonly.aof

20. 指定更新日誌條件,共有3個可選值: 
    no:表示等操作系統進行數據緩存同步到磁碟(快) 
    always:表示每次更新操作後手動調用fsync()將數據寫到磁碟(慢,安全) 
    everysec:表示每秒同步一次(折衷,預設值)

    appendfsync everysec

21. 指定是否啟用虛擬記憶體機制,預設值為no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁碟上,訪問多的頁面由磁碟自動換出到記憶體中(在後面的文章我會仔細分析Redis的VM機制)

     vm-enabled no

22. 虛擬記憶體文件路徑,預設值為/tmp/redis.swap,不可多個Redis實例共用

     vm-swap-file /tmp/redis.swap

23. 將所有大於vm-max-memory的數據存入虛擬記憶體,無論vm-max-memory設置多小,所有索引數據都是記憶體存儲的(Redis的索引數據 就是keys),也就是說,當vm-max-memory設置為0的時候,其實是所有value都存在於磁碟。預設值為0

     vm-max-memory 0

24. Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共用,vm-page-size是要根據存儲的 數據大小來設定的,作者建議如果存儲很多小對象,page大小最好設置為32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不 確定,就使用預設值

     vm-page-size 32

25. 設置swap文件中的page數量,由於頁表(一種表示頁面空閑或使用的bitmap)是在放在記憶體中的,,在磁碟上每8個pages將消耗1byte的記憶體。

     vm-pages 134217728

26. 設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置為0,那麼所有對swap文件的操作都是串列的,可能會造成比較長時間的延遲。預設值為4

     vm-max-threads 4

27. 設置在向客戶端應答時,是否把較小的包合併為一個包發送,預設為開啟

    glueoutputbuf yes

28. 指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的哈希演算法

    hash-max-zipmap-entries 64

    hash-max-zipmap-value 512

29. 指定是否激活重置哈希,預設為開啟(後面在介紹Redis的哈希演算法時具體介紹)

    activerehashing yes

30. 指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件

    include /path/to/local.conf


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 網關的作用之一,就是有統一的數據出入口,基於這個功能,我們可以在網關上配置監控,從而把所有web服務的請求應答基本數據捕獲並展顯出來。 ...
  • 一篇,我們創建了OcelotGateway網關項目,DemoAAPI項目,DemoBAPI項目,為了驗證用戶並分發Token,現在還需要添加AuthenticationAPI項目,也是asp.net core web api項目,整體思路是,當用戶首次請求(Request)時web服務,網關會判斷本... ...
  • Ocelot是一個.net core框架下的網關的開源項目,下圖是官方給出的基礎實現圖,即把後臺的多個服務統一到網關處,前端應用:桌面端,web端,app端都只用訪問網關即可。 ...
  • 前幾天Insus.NET有寫過一篇《從字元串數組中把數字的元素找出來》http://www.cnblogs.com/insus/p/8001026.html 和它的延伸篇《C# yield關鍵詞使用》http://www.cnblogs.com/insus/p/8003809.html 那是寫一個類 ...
  • ASP.NET Core應用程式發佈linux在shell中運行是正常的。可一但shell關閉網站也就關閉了,所以要配置守護進程, 用的是Supervisor,本文主要記錄配置的過程和過程遇到的問題 安裝Supervisor 1 yum install python-setuptools 2 eas ...
  • 1.新建虛擬機時,自己下載的是centos64系統,選擇系統時,預設選擇centos,而未選擇centos64位,導致犯了一個低級錯誤,導致後面網卡安裝一直有問題 2.查看ip命令與centos5.x和centos6.x版本,皆不同,改為ip addr 3.配置網卡時,必須將網卡設為開機自動激活 希 ...
  • 在學習Elasticsearch的過程中,必不可少需要通過一些工具查看es的運行狀態以及數據。如果都是通過rest請求,未免太過麻煩,而且也不夠人性化。此時,head可以完美的幫助你快速學習和使用Elasticsearch。 基礎環境 Elasticsearch集群搭建請參考前一篇文章 http:/ ...
  • 為方便本地yum的管理,一般都是在公司區域網內搭建本地yum倉庫,實現公司內部快速安裝常用軟體。 步驟如下: 1、搭建要實現本地yum管理的軟體,測試該軟體搭建成功與否; 2、定製rpm包及其相關依賴; 3、搭建本地yum源 4、配置客戶端yum,實現區域網取包安裝。 首先聲明:該本地yum倉庫中的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...