Redis介紹與安裝詳解

一、Redis介紹
Redis是一種具有數據結構的NOSQL數據庫,其存儲類型爲key-value 模式,可以通過一組命令提供對可變數據結構的訪問,不同的進程可以以共享的方式查詢和修改相同的數據結構。
Redis數據結構一些特殊的屬性:
Redis始終將它們存儲在磁盤上,即使它們始終被提供並修改到服務器內存中也是如此。這意味着Redis速度很快,但這也是非易失性的;數據結構的實現會提高內存效率,因此與使用高級編程語言建模的相同數據結構相比,Redis內部的數據結構可能使用較少的內存;Redis提供了許多自然可以在數據庫中找到的功能,例如複製,持久性的可調級別,集羣,高可用性。
二、Redis服務安裝(window)
Redis官網上的安裝包只支持Linux,OSX,OpenBSD,NetBSD,FreeBSD系統,不支持window系統,Microsoft技術團隊對redis進行修改,開發了一個支持window的redis(注意,此版本爲2.6.12版本,支持String 、list、set、sortSet、hash等基本數據類型,能夠滿足普通的軟件開發應用 );
Redis下載地址 https://pan.baidu.com/s/1bqPQZDBgfj1enB9QiTsOyQ 提取碼 wxic
下載解壓,點擊start-server.bat啓動redis
在這裏插入圖片描述
點擊redis-cli.exe,實現客戶端連接redis,
在這裏插入圖片描述
Redis默認密碼爲空,如果要設置密碼,修改redis.conf文件配置 # requirepass foobared去掉註釋,foobared改爲自己的密碼。注意:redis速度相當快,一個外部用戶在一秒鐘進行150K次密碼嘗試,需指定強大的密碼來防止暴力破解
可以redis-cli客戶端連接遠程redis服務器,連接命令redis-cli -h host -p port -a password
三、Redis服務安裝(Linux)
從redis的官網https://redis.io/download下載redis最新版安裝包,此教程使用的版本爲redis-5.0.5,其安裝版爲redis-5.0.5.tar.gz
上傳安裝包到Linux的/usr/loca/目錄下,解壓

cd /usr/local
tar -zxvf redis-5.0.5.tar.gz

安裝

cd redis-5.0.5
make 

在這裏插入圖片描述
如果出現 /bin/sh:cc:未找到命令,說明麼有安裝gcc,需要安裝gcc

yum install gcc-c++ -y
make MALLOC=libc

啓動

cd src
./redis-server

在這裏插入圖片描述
有這個截圖說明redis安裝成功並啓動,但是按CTRl+Z或者CTRL+C,redis服務器會停止,不可以進行遠程連接,需要設置redis進場爲守護進程,修改redis-5.0.5目錄下redis.conf文件,把daemonize no改爲daemonize yes,然後重新啓動,啓動時讀取redis.conf配置文件
./redis-server …/redis.conf
打開防火牆6379端口

firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

設置密碼參考window版本安裝的設置密碼
設置開機啓動

echo  '/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-5.0.5/redis.conf' >> 
/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

redis默認是不允許遠程連接的,要開啓遠程連接需要修改redis-5.0.5目錄下redis.conf文件,把bind 127.0.0.1註釋,把protected-mode 設置爲no,protected-mode=yes是啓動保護模式,需配置bind ip或者設置訪問密碼
四、Redis配置文件詳解

bind127.0.0.1 #綁定的主機地址,註釋後所有接收所有情況
protected-modeyes # 是否開啓保護模式,默認開啓。沒有配置指定bind和密碼。開啓該參數後,redis只會本地進行訪問,拒絕外部訪問。
port 6379 #指定redis監聽端口
tcp-backlog 511 #此參數確定了TCP連接中已完成隊列(完成三次握手之後)的長度, 當然此值必須不大於Linux系統定義的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數值是128。當系統併發量大並且客戶端速度緩慢的時候,可以將這二個參數一起參考設定。該內核參數默認值一般是128,對於負載很大的服務程序來說大大的不夠。一般會將它修改爲2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn =2048,然後在終端中執行sysctl -p
timeout 0 #當 客戶端閒置多長時間後關閉連接,如果指定爲0,表示關閉該功能
tcp-keepalive 300 #如果設置不爲0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測掛掉的對端。降低中間設備出問題而導致網絡看似連接卻已經與對端端口的問題。在Linux內核中,設置了keepalive,redis會定時給對端發送ack。檢測到對端關閉需要兩倍的設置值。
daemonize no #當爲yes的時候,以守護進程的模式運行(後臺運行)
supervised no可以通過upstart和systemd管理Redis守護進程,該參數是和具體的操作系統相關
pidfile /var/run/redis_6379.pid #當redis以守護進程方式運行時,默認寫入pid的文件及路徑
loglevel notice 日誌級別,要用warning
logfile "" #指定了記錄日誌的文件。空字符串的話,日誌會打印到標準輸出設備。後臺運行的redis標準輸出是/dev/null
databases 16 數據庫的數量,默認使用的數據庫是DB 0。可以通過”SELECT “命令選擇一個db
save 900 1 #900秒有1個key變化,就做一個保存到磁盤
save 300 10 #300秒有10個key變化,就做一個保存到磁盤
save 60 10000 #60秒有10000個key變化就做一個保存到磁盤
stop-writes-on-bgsave-error yes #如果啓用了RDB快照(至少一個保存點)並且最新的後臺保存失敗,Redis將停止接受寫入。
rdbcompression yes使用壓縮rdb文件,rdb文件壓縮使用LZF壓縮算法,yes:壓縮,但是需要一些cpu的消耗。no:#不壓縮,需要更多的磁盤空間
rdbchecksum yes #是否校驗rdb文件。從rdb格式的第五個版本開始,在rdb文件的末尾會帶上CRC64的校驗和。這跟有利於文件的容錯性,但是在保存rdb文件的時候,會有大概10%的性能損耗,所以如果你追求高性能,可以關閉該配置。
dbfilename dump.rdb #rdb文件的名稱
dir./ #數據目錄,數據庫的寫入會在這個目錄。rdb、aof文件也會寫在這個目錄
slave-serve-stale-data yes #當從庫同主機失去連接或者複製正在進行,從機庫有兩種運行方式:1) 如果slave-serve-stale-data設置爲yes(默認設置),從庫會繼續響應客戶端的請求。2) 如果slave-serve-stale-data設置爲no,除去INFO和SLAVOF命令之外的任何請求都會返回一個錯誤”SYNC with master in progress”
slave-read-only yes #作爲從服務器,默認情況下是隻讀的(yes),可以修改成NO,用於寫(不建議)
repl-diskless-sync no #是否使用socket方式複製數據。目前redis複製提供兩種方式,disk和socket。如果新的slave連上來或者重連的slave無法部分同步,就會執行全量同步,master會生成rdb文件。有2種方式:disk方式是master創建一個新的進程把rdb文件保存到磁盤,再把磁盤上的rdb文件傳遞給slave。socket是master創建一個新的進程,直接把rdb文件以socket的方式發給slave。disk方式的時候,當一個rdb保存的過程中,多個slave都能共享這個rdb文件。socket的方式就的一個個slave順序複製。在磁盤速度緩慢,網速快的情況下推薦用socket方式。
repl-diskless-sync-delay 5 #diskless複製的延遲時間,防止設置爲0。一旦複製開始,節點不會再接收新slave的複製請求直到下一個rdb傳輸。所以最好等待一段時間,等更多的slave連上來。
repl-disable-tcp-nodelay no #是否禁止複製tcp鏈接的tcp nodelay[gs1] [gs2] 參數,可傳遞yes或者no。默認是no,即使用tcp nodelay。如果master設置了yes來禁止tcp nodelay設置,在把數據複製給slave的時候,會減少包的數量和更小的網絡帶寬。但是這也可能帶來數據的延遲。默認我們推薦更小的延遲,但是在數據量傳輸很大的場景下,建議選擇yes。
slave-priority 100 #當master不可用,Sentinel會根據slave的優先級選舉一個master。最低的優先級的slave,當選master。而配置成0,永遠不會被選舉。
appendonly no #默認redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鐘的數據丟失,根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的數據在接收後都寫入 appendonly.aof 文件,每次啓動時Redis都會先把這個文件的數據讀入內存裏,先忽略RDB文件
appendfilename"appendonly.aof" sof文件名

appendfsynceverysec #aof持久化策略的配置
#no表示不執行fsync,由操作系統保證數據同步到磁盤,速度最快。
#always表示每次寫入都執行fsync,以保證數據同步到磁盤。
#everysec表示每秒執行一次fsync,可能會導致丟失這1s數據。
no-appendfsync-on-rewrite no #在aof重寫或者寫入rdb文件的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite字段設置爲默認設置爲no。如果對延遲要求很高的應用,這個字段可以設置爲yes,否則還是設置爲no,這樣對持久化特性來說這是更安全的選擇。設置爲yes表示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成後再寫入,默認爲no,建議yes。Linux的默認fsync策略是30秒。可能丟失30秒數據。
auto-aof-rewrite-percentage 100 aof自動重寫配置。當目前aof文件大小超過上一次重寫的aof文件大小的百分之多少進行重寫,即當aof文件增長到一定大小的時候Redis能夠調用bgrewriteaof對日誌文件進行重寫。當前AOF文件大小是上次日誌重寫得到AOF文件大小的二倍(設置爲100)時,自動啓動新的日誌重寫過程。
auto-aof-rewrite-min-size64mb #設置允許重寫的最小aof文件大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫
aof-load-truncatedyes#aof文件可能在尾部是不完整的,當redis啓動的時候,aof文件的數據被載入內存。重啓可能發生在redis所在的主機操作系統宕機後,尤其在ext4文件系統沒有加上data=ordered選項(redis宕機或者異常終止不會造成尾部不完整現象。)出現這種現象,可以選擇讓redis退出,或者導入儘可能多的數據。如果選擇的是yes,當截斷的aof文件被導入的時候,會自動發佈一個log給客戶端然後load。如果是no,用戶必須手動redis-check-aof修復AOF文件纔可以。
lua-time-limit5000如果達到最大時間限制(毫秒),redis會記個log,然後返回error。當一個腳本超過了最大時限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,只能用第二個命令殺。
slowlog-log-slower-than10000 slog log是用來記錄redis運行中執行比較慢的命令耗時。當命令的執行超過了指定時間,就記錄在slow log中,slog log保存在內存中,所以沒有IO操作。
#執行時間比slowlog-log-slower-than大的請求記錄到slowlog裏面,單位是微秒,所以1000000就是1秒。注意,負數時間會禁用慢查詢日誌,而0則會強制記錄所有命令。
slowlog-max-len128慢查詢日誌長度。當一個新的命令被寫進日誌的時候,最老的那個記錄會被刪掉。這個長度沒有限制。只要有足夠的內存就行。你可以通過 SLOWLOG RESET 來釋放內存。
latency-monitor-threshold0 #延遲監控功能是用來監控redis中執行比較緩慢的一些操作,用LATENCY打印redis實例在跑命令時的耗時圖表。只記錄大於等於下邊設置的值的操作。0的話,就是關閉監視。默認延遲監控功能是關閉的,如果你需要打開,也可以通過CONFIGSET命令動態設置。
notify-keyspace-events""
#鍵空間通知使得客戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了Redis 數據集的事件。因爲開啓鍵空間通知功能需要消耗一些 CPU ,所以在默認配置下,該功能處於關閉狀態。
#notify-keyspace-events的參數可以是以下字符的任意組合,它指定了服務器該發送哪些類型的通知:
##K 鍵空間通知,所有通知以 __keyspace@__ 爲前綴
##E 鍵事件通知,所有通知以 __keyevent@__ 爲前綴
##g DEL 、 EXPIRE 、RENAME 等類型無關的通用命令的通知
##$ 字符串命令的通知
##l 列表命令的通知
##s 集合命令的通知
##h 哈希命令的通知
##z 有序集合命令的通知
##x 過期事件:每當有過期鍵被刪除時發送
##e 驅逐(evict)事件:每當有鍵因爲 maxmemory 政策而被刪除時發送
##A 參數 g$lshzxe 的別名
#輸入的參數中至少要有一個 K 或者 E,否則的話,不管其餘的參數是什麼,都不會有任何 通知被分發。詳細使用可以參考http://redis.io/topics/notifications
hash-max-ziplist-entries512#數據量小於等於hash-max-ziplist-entries的用ziplist,大於hash-max-ziplist-entries用hash hash-max-ziplist-value64 #value大小小於等於hash-max-ziplist-value的用ziplist,大於hash-max-ziplist-value用hash。
list-max-ziplist-size-2
#the highestperforming option is usually -2 (8 Kb size) or -1 (4 Kb size),
#but if your use caseis unique, adjust the settings as necessary.
list-compress-depth0
set-max-intset-entries512 #數據量小於等於set-max-intset-entries用iniset,大於set-max-intset-entries用set。
zset-max-ziplist-entries128 #數據量小於等於zset-max-ziplist-entries用ziplist,大於zset-max-ziplist-entries用zset。
zset-max-ziplist-value64 #value大小小於等於zset-max-ziplist-value用ziplist,大於zset-max-ziplist-value用zset。
hll-sparse-max-bytes3000#value大小小於等於hll-sparse-max-bytes使用稀疏數據結構(sparse),大於hll-sparse-max-bytes使用稠密的數據結構(dense)。一個比16000大的value是幾乎沒用的,建議的value大概爲3000。如果對CPU要求不高,對空間要求較高的,建議設置到10000左右。
activerehashingyes#Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低內存的使用。當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置爲no。如果沒有這麼嚴格的實時性要求,可以設置爲yes,以便能夠儘可能快的釋放內存。
client-output-buffer-limitnormal 0 0 0
##對客戶端輸出緩衝進行限制可以強迫那些不從服務器讀取數據的客戶端斷開連接,用來強制關閉傳輸緩慢的客戶端。
#對於normalclient,第一個0表示取消hard limit,第二個0和第三個0表示取消soft limit,normal client默認取消限制,因爲如果沒有尋問,他們是不會接收數據的。
client-output-buffer-limitslave 256mb 64mb 60 #對於slaveclient和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那麼服務器就會立即斷開客戶端連接。
client-output-buffer-limitpubsub 32mb 8mb 60 #對於pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那麼服務器就會立即斷開客戶端連接。
hz10 #redis執行任務的頻率爲1s除以hz。
aof-rewrite-incremental-fsyncyes #在aof重寫的時候,如果打開了aof-rewrite-incremental-fsync開關,系統會每32MB執行一次fsync。這對於把文件寫入磁盤是有幫助的,可以避免過大的延遲峯值。

五、Redis工具
下載鏈接:https://pan.baidu.com/s/1EpiSptKVpeGcwTb15kBGyw 提取碼 lgwd
解壓點擊redisclient-win32.x86.1.5.exe 啓動
在這裏插入圖片描述
六、Redis數據類型

Redis不是簡單的鍵值存儲,它實際上是一個數據結構服務器,支持不同類型的值。這意味着,儘管在傳統的鍵值存儲中,您將字符串鍵關聯到字符串值,但是在Redis中,該值不僅限於簡單的字符串,還可以容納更復雜的數據結構。
二進制安全字符串;
List:根據插入順序排序的字符串元素的集合。它們基本上是鏈表;
Set:唯一,未排序的字符串元素的集合;
Sorted sets,但每個字符串元素都與一個稱爲score的浮點值相關聯。元素總是按它們的分數排序,因此與Sets不同,可以檢索一系列元素(例如,您可能會問:給我前10名或後10名);
Hashes,是由與值關聯的字段組成的映射。字段和值都是字符串。這與Ruby或Python哈希非常相似;
Bit arrays(或簡稱爲位圖):可以使用特殊命令像位數組一樣處理字符串值:您可以設置和清除單個位,計數所有設置爲1的位,找到第一個設置或未設置的位,等等;
HyperLogLogs:這是一個概率數據結構,用於估計集合的基數;;
Streams:提供抽象日誌數據類型的類地圖項的僅追加集合。

參考:https://blog.csdn.net/zwc2xm/article/details/78663075

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章