一:Redis安裝:
下載地址:http://redis.io/download
1:首先安裝redis需要先安裝gcc,把下載好的redis-3.0.0-rc2.tar.gz放到linux /usr/local文件夾下;
gcc安裝:
(1):下載gcc安裝包,這種需要各種編譯,非常麻煩;
(2):使用yum安裝:乾脆兩個都裝了
yum -y install gcc
yum -y install gcc-c++
2:進行解壓,tar -zxvf redis-3.0.0.rc2.gz,並將文件名改名爲 redis-3.0.0(方便記憶)
mv redis-3.0.0.rc2 /usr/local/redis.3.0.0
3:進入到redis-3.0.0目錄下,進行編譯 make
4:進入到src下進行安裝,make install 驗證(||查看src下的目錄,有redis-server,redis-cli即可)
mkdir -p /usr/local/redis/ect
mkdir -p /usr/local/redis/bin
6:把redis-3.0.0下的redis.conf移動到 /usr/local/redis/ect下
cp redis.conf /usr/local/redis/etc
7:把redis-3.0.0/src下的mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-dump,redis-cli,
redis-server 文件移動到bin目錄下:命令:
mv mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-dump,redis-cli,
redis-server /usr/local/redis/bin
8:啓動並指定配置文件: ./redis-server /usr/local/redis/ect/redis.conf(注意要使用後臺啓動,所以修改redis.conf
裏面的9 daemonize 改爲yes)
dir /usr/local/redis/etc 配置數據文件的位置
10:驗證是否啓動成功:
ps -ef | grep redis查看是否有redis服務 或者 查看端口:netstat -tunpl | grep 6379
進入redis客戶端: /usr/local/redis/bin/redis-cli 退出 客戶端 quit(此時沒有退出redis服務)
退出redis服務:(1):pkill redis-server,
(2):kill進程號
(3):/usr/local/redis/bin/redis-cli shutdown
二:Redis一共分爲5中基本類型數據:String, Hash, List, Set, ZSet
三:Redis高級命令:
返回滿足所有的鍵 keys* (可以模糊匹配)
exists 是否存在指定的key;
expire 設置某個key的過期時間,使用ttl查看剩餘時間;
expire name 10 (name的過期時間10秒)
persist key 取消過期時間
persist name
select 選擇數據庫,數據庫爲0到15,(一共16個數據庫),默認進入的是0數據庫
move[數據庫下標]將當前數據庫中的key移動到其他數據庫中
move name 1;(注意:移動了當前數據庫中的數據就沒有了)
randomkey 隨機返回數據庫中的一個key
rename 重命名key;
rename name fname;
echo 打印命令
dbsize 查看數據庫key的數據;
info 獲取數據庫信息
config get 實時傳儲收到的請求(返回相關的配置信息)
config get * (返回所有配置)
flushdb 清空當前數據庫,flushall 清空所有數據庫
四:Redis的安全性:
因爲redis速度相當快,所以在一臺比較好的服務器下,一個外部用戶在一秒內可以進行15W次的密碼嘗試,這意味着你
需要設置非常強大的密碼來防止暴力破解;
vim編輯redis.conf 文件,找到下面進行保存修改
#requirepass foobared
requirepass ****(*爲密碼,密碼可以隨意設置,比如就設置爲redis)
重啓服務器pkill redis-server
再次進入:keys*
(error) NOAUTH Authentication required.
會發現沒有權限查詢,127.0.0.1:6379> auth redis
OK 輸入密碼則進入成功
每次進入都要輸入密碼,還有種簡單的方式:
還有種簡單的方式是直接登錄授權:/usr/local/redis/bin/redis-cli -a [密碼];
/usr/local/redis/bin/redis-cli -a redis;
五:Redis主從複製:
1:Master可以擁有多個slave
2: 多個slave可以連接到同一個master外,還可以連接到其他的slave
3:主從複製不會阻塞master,在同步數據時,master可以繼續處理client請求,
4:提供系統的伸縮性;
主從複製的過程
1:slave與master建立連接,發送sync同步命令
2:master會開啓一個後臺進程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存,
3:後臺完成保存後,就將文件發送給slave;
4:slave將此文件保存到硬盤上;
主從複製配置:
clone服務期之後slave的IP地址
修改配置文件:/usr/local/redis/etc/redis.conf
第一步:slaveof <materip> <materport>
第二步:masterauth <master-password> (如果主服務器沒有設置密碼,則第二步可以直接省略);
使用info查看role角色即可知道是主服務器和從服務器
從服務器只支持讀,不支持寫;主服務可讀可寫
六:Redis事務:
redis的事務非常簡單,使用方式如下:
首先是使用 multi 打開事務,然後進行設置,這時設置的數據,都會放入隊列裏進行保存,
最後使用 exec 執行,
把數據依次存儲到redis中,使用 discard 方法取消事務(回滾)
Redis持久化機制:
redis是一個支持持久化的內存操作,也就說redis需要經常將內存中的數據同步到硬盤保證持久化;
redis持久化的兩種方式:
(1):snapshotting(快照)默認方式,將內存中以快照的方式寫入到二進制文件中,默認爲dump.rdb,
可以通過配置自動做持久化的方式,我們可以配置redis在n秒內如果超過m個key,則修改就自動做快照。
snapshotting設置
save 900 1 #900秒內如果超過1個key被修改,則發起快照保存
save 300 10 #300秒內如果超過10個key被修改,則發起快照保存
save 60 10000
(2):append-only file(縮寫aof)的方式,(有點類似oracle日誌)由於快照方式是在一定時間間隔做一次,所以可能
可能發生redis意外down的情況就會丟失最後一次快照後的所有修改的數據,aof比快照方式有更好的持久化性,
是由於在使用aof時,redis會將收到的每一個寫命令通過write函數追加到命令中,當redis重新啓動時會重新
執行文件中保存的寫命令來在內存中重新建立這個數據庫的內容,這個文件在bin目錄下,appendonly.aof,不是
寫到硬盤上,可以通過修改配置文件強制寫到硬盤中。
aof設置:
appendonly yes //啓動aof持久化方式有三種修改方式:
#appendfsync always //收到寫命令就立即寫到磁盤,效率最慢,但是保證完全的持久化
#appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面做了很好的折中
#appendfsync no //完全依賴os,性能最好,持久化完全沒保證
一般用第一種 appendfsync always
七:Redis發佈與訂閱功能:
redis提供了簡單的發佈與訂閱功能。
使用 subscribe [頻道]進行訂閱監聽
使用 publish [頻道][發佈內容]進行發佈消息廣播
八:Redis使用java API:
導入jedis.jar包,
Jedis j = new Jedis("111.230.141.143", 6379);即可創建redis對象
redis對象的方法與linux中redis的使用一樣。該怎麼就怎麼用,比如設置一個key爲name,value爲fanfan
可以這樣寫:
j.set("name","fanfan");
j.get("name");
九:”Redis集羣搭建:
在redis3.0以前,提供了Sentinel工具來監控各Master的狀態,如果Master異常則會做主從切換,將slave作爲master
將master作爲slave,其配置也是稍微的複雜,並且各方面的表現一般,現在redis3.0已經支持集羣的容錯功能,
並且非常簡單。
集羣搭建:至少3個master
第一步:創建一個文件夾,redis-cluster,然後在其下面分別創建6個文件夾如下:
(1):mkdir -p /usr/local/redis-cluster
(2):mkdir 7001, mkdir 7002, mkdir 7003, mkdir 7004, mkdir 7005, mkdir 7006
第二步:把之前redis.conf配置文件copy到700*下,進行修改各個文件內容;
(1):darmonize yes
(2):port 700* (分別對每個機器的端口號進行設置)
(3):bind 192.168.1.171(必須綁定當前機器IP,不然會無限悲劇下去)
(4):dir /usr/local/redis-cluster/700* (指定數據文件存放位置,必須要指定不同的目錄位置,不然後丟失數據)
(5):cluster-enalbed yes(啓動集羣模式,開始玩耍)
(6):cluster-config-file nodes700*.conf(這裏的700x最好和port對應上)
(7):cluster-node-timeout 5000
(8):appendonly yes (開啓aof模式)
第三步:把修改後的配置文件,分別copy到各個文件夾下,注意每個文件需要修改端口號,並且nodes文件也要不相同!
第四步:由於redis集羣需要使用ruby名命令,所以我們需要安裝ruby,
(1):yum install ruby
(2):yum install rubygems
(3):gem install redis (安裝redis和ruby的接口)
如果報錯:“redis requires Ruby version >= 2.2.2”,則進行下面操作
方法一:換yum源安裝
~]# yum install centos-release-scl-rh //會在/etc/yum.repos.d/目錄下多出一個CentOS-SCLo-scl-rh.repo源
~]# yum install rh-ruby23 -y //直接yum安裝即可
~]# scl enable rh-ruby23 bash //必要一步
~]# ruby -v //查看安裝版本
參考:https://www.cnblogs.com/ding2016/p/7903147.html
第五步:分別啓動6個redis實例,然後檢查是否啓動成功
(1):/usr/local/redis/bin/redis-server /usr/local/redis-cluster/700*/redis.conf
(2):ps -ef | grep redis (查看是否啓動成功)
第六步:首先到redis3.0的安裝目錄下,然後執行rdis-trib.rb命令
(1):cd /usr/local/redis3.0.0/src
(2):./redis-trib.rb create --replicas 1 192.168.218.130:7001 192.168.218.130:7002 192.168.218.130:7003
192.168.218.130:7004 192.168.218.130:7005 192.168.218.130:7006
第七步:到此爲止,我們集羣搭建成功,進行驗證:
(1):連接到任意一個客戶端: ./redis-cli -c -h -p (-c表示集羣模式,指定ip地址和端口)
如:/usr/local/redis/bin/redis-cli -c -h 192.168.218.130 -p 700*
(2):進行驗證:cluster info(查看集羣信息),cluster nodes(查看集羣列表)
(3):進行數據操作驗證
(4):關閉集羣則需要逐個進行關閉,使用命令:
/usr/local/redis/bin/redis-cli -c -h 111.230.141.142 -p 700* shutdown
第八步:(補充)
友情提示:當集羣出現無法啓動時,刪除臨時的數據文件,再次重新啓動每一個redis服務,然後重新構造集羣環境
redis-trib.rb官方羣操作命令,http://redis.io/topics/cluster-tutorial
推薦博客:http://blog.51yip.com/nosql/1726.html/comment-page-1