這裏演示的版本是Redis4.0.6,Linux系統是CentOS6.7,Jdk1.7,Jedis2.8.1html
這是官方文檔介紹的安裝方式java
下載,解壓,編譯:redis
$ 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配置文件)app
./redis-server
服務端啓動成功less
啓動客戶端(暫時不設置ip,端口號和密碼)
./redis-cli
客戶端啓動成功
上面的方式只是一種小練習,咱們如今經過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.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