===> Redis記憶體資料庫簡介:
Redis 是完全開源免費的,遵守BSD協定,是一個高性能的key-value資料庫。
===> Redis 的特點:
->基于記憶體
-> 持久化: RDB、AOF
-> 消息機制:支援String,隻支援Topic的消息(廣播)
-> 豐富的資料類型
-> 支援簡單的事務
-> 支援主從複制
-> HA(哨兵): 對版本有要求,需要 2.4 版本以上
===> Redis的安裝和配置: 需要gcc的編譯器
-> Redis 單機部署:
<code> </code><code>tar </code><code>-</code><code>zxvf redis</code><code>-</code><code>3.0</code><code>.</code><code>5.tar</code><code>.gz </code>
<code> </code><code>make</code>
<code> </code><code>make PREFIX</code><code>=</code><code>/</code><code>app</code><code>/</code><code>redis install</code>
-> Redis的相關指令
redis-benchmark 提供的一個壓力測試工具,模拟:10萬操作
redis-check-aof 檢查AOF日志檔案
redis-check-dump 檢查RDB快照檔案
redis-cli 指令行
redis-sentinel 哨兵(Redis的HA) -----> 配置檔案:sentinel.conf 2.4版本以上
redis-server 伺服器
-> 配置檔案
--- redis.conf
daemonize yes 改成yes 後,啟動後會在背景運作
port 6379
-> 服務啟動指令:redis-server conf/redis.conf
-> 用戶端連接配接指令: redis-cli -p 6379 | redis-cli -h 192.168.10.210 -p 6379
===> Redis 叢集的安裝和配置:(星型架構,線型架構)
-> 此處隻講解星型架構(此架構結構為單台伺服器上使用不同端口啟動三個服務組成叢集,多台伺服器同理)
--- 主:6379端口 (關閉 RDB 和 AOF)
--- 從:6380, 6381端口 (開啟 RDB 和 AOF)
-> 配置檔案:
<code> </code><code>redis6379.conf</code>
<code> </code><code>daemonize yes</code>
<code> </code><code>#save 900 1</code>
<code> </code><code>#save 300 10</code>
<code> </code><code>#save 60 10000</code>
<code> </code>
<code> </code><code>pidfile </code><code>/</code><code>app</code><code>/</code><code>redis</code><code>/</code><code>pids</code><code>/</code><code>redis_6379.pid</code>
<code> </code><code>logfile </code><code>"/app/redis/logs/redis_6379/redis.log"</code>
<code> </code><code>dbfilename dump.rdb</code>
<code> </code><code>dir</code> <code>"/data/redis_data/redis_6379"</code>
<code> </code>
<code> </code><code>appendonly no</code>
<code> </code><code>appendfilename </code><code>"appendonly6379.aof"</code>
<code> </code><code>redis6380.conf</code>
<code> </code><code>port </code><code>6380</code>
<code> </code><code>slaveof </code><code>192.168</code><code>.</code><code>157.11</code> <code>6380</code>
<code> </code><code>pidfile </code><code>/</code><code>app</code><code>/</code><code>redis</code><code>/</code><code>pids</code><code>/</code><code>redis_6380.pid</code>
<code> </code><code>logfile </code><code>"/app/redis/logs/redis_6380/redis.log"</code>
<code> </code><code>dir</code> <code>"/data/redis_data/redis_6380"</code>
<code> </code><code>appendonly yes</code>
<code> </code><code>appendfilename </code><code>"appendonly6380.aof"</code>
<code> </code><code>redis6381.conf</code>
<code> </code><code>port </code><code>6381</code>
<code> </code><code>slaveof </code><code>192.168</code><code>.</code><code>157.11</code> <code>6379</code>
<code> </code><code>pidfile </code><code>/</code><code>app</code><code>/</code><code>redis</code><code>/</code><code>pids</code><code>/</code><code>redis_6381.pid</code>
<code> </code><code>logfile </code><code>"/app/redis/logs/redis_6381/redis.log"</code>
<code> </code><code>dir</code> <code>"/data/redis_data/redis_6381"</code>
<code> </code><code>appendfilename </code><code>"appendonly6381.aof"</code>
(*)注意:預設:從節點隻讀
<code>(error) READONLY You can't write against a read only slave.</code>
<code>修改參數:</code>
<code>slave</code><code>-</code><code>read</code><code>-</code><code>only yes</code>
-> Redis的HA:哨兵機制(要在解壓的安裝包中copy sentinel.conf 檔案到 /conf 目錄下)
<code> </code><code>sentinel monitor mymaster </code><code>192.168</code><code>.</code><code>10.210</code> <code>6379</code> <code>1</code>
<code> </code><code># IP 端口 哨兵個數</code>
<code> </code><code>sentinel auth</code><code>-</code><code>pass</code> <code><master</code><code>-</code><code>name> <password></code>
<code> </code><code># 配置連接配接主節點的密碼</code>
<code> </code><code>sentinel down</code><code>-</code><code>after</code><code>-</code><code>milliseconds mymaster </code><code>30000</code>
<code> </code><code># 表示 30 秒内如果沒有收到主節點的心跳,哨兵就認為主節點down</code>
<code> </code><code>sentinel parallel</code><code>-</code><code>syncs mymaster </code><code>1</code>
<code> </code><code># 選舉出新的主節點後,可以同時連接配接其他從節點的個數</code>
<code> </code><code>sentinel failover</code><code>-</code><code>timeout mymaster </code><code>180000</code>
<code> </code><code># 失敗切換時,允許的最大時間</code>
---哨兵啟動指令:redis-sentinel sentinel.conf
-> Redis的分片:
---Twemproxy 是一種代理分片機制, 由 Twitter 開源
Twemproxy 作為代理,可接受來自多個程式 的通路,按照路由規則,轉發給背景的各個 Redis 伺服器, 再原路傳回
--- 安裝Twemproxy
<code> </code><code>git clone https:</code><code>/</code><code>/</code><code>github.com</code><code>/</code><code>twitter</code><code>/</code><code>twemproxy.git</code>
<code> </code><code>cd twemproxy</code><code>/</code>
<code> </code>
<code> </code><code>CFLAGS</code><code>=</code><code>"-ggdb3 -O0"</code> <code>autoreconf </code><code>-</code><code>fvi && .</code><code>/</code><code>configure </code><code>-</code><code>-</code><code>prefix</code><code>=</code><code>/</code><code>app</code><code>/</code><code>proxy </code><code>-</code><code>-</code><code>enable</code><code>-</code><code>debug</code><code>=</code><code>log && make && make install</code>
--- 配置檔案:nutcracker.yml (需要在解壓的安裝包/conf 目錄下copy 到安裝目錄的 conf 目錄下)
<code> </code><code>alpha:</code>
<code> </code><code>listen: </code><code>127.0</code><code>.</code><code>0.1</code><code>:</code><code>22121</code>
<code> </code><code>hash</code><code>: fnvla_64</code>
<code> </code><code>distribution: ketama</code>
<code> </code><code>auto_eject_hosts: true</code>
<code> </code><code>redis: true</code>
<code> </code><code>server_retry_timeout: </code><code>2000</code>
<code> </code><code>server_failure_limit: </code><code>1</code>
<code> </code><code>servers:</code>
<code> </code><code>-</code> <code>192.168</code><code>.</code><code>10.210</code><code>:</code><code>6380</code>
<code> </code><code>-</code> <code>192.168</code><code>.</code><code>10.210</code><code>:</code><code>6381</code>
--- 檢查配置檔案是否正确: ./nutcracker -t conf/nutcracker.yml
--- 啟動代理伺服器: ./nutcracker -d -c conf/nutcracker.yml
--- 此時連接配接Redis 需要使用 Twemproxy 配置的端口連接配接: redis-cli -p 22121
===> Redis的操作:基于key-value形式
->
---
===> Redis的事務: 不是真正的事務
-> Redis的事務的本質:将一組操作放入隊列中,批量執行
-> 對比Oracle和Redis的事務
-> Redis 的事務執行個體:(銀行轉賬)
<code> </code><code>set</code> <code>tom </code><code>1000</code>
<code> </code><code>set</code> <code>mike </code><code>1000</code>
<code> </code><code>multi</code>
<code> </code><code>decrby tom </code><code>100</code>
<code> </code><code>incrby mike </code><code>100</code>
<code> </code><code>exec</code>
===> Redis的鎖機制
-> 核心:當事務送出的時候,如果監控的值,發生變化,則送出失敗
指令:watch
-> Redis 的鎖執行個體:(買票)
<code> </code><code>set</code> <code>ticket </code><code>1</code>
<code> </code>
<code> </code><code>使用者一:tom</code>
<code> </code><code>decr ticket</code>
<code> </code><code>exec</code> <code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>> 送出的時候,慢了一點</code>
<code> </code><code>1</code><code>) (integer) </code><code>-</code><code>1</code> <code>=</code><code>=</code><code>=</code><code>=</code><code>> 票數不可能是</code><code>-</code><code>1</code>
<code> </code><code>2</code><code>) (integer) </code><code>900</code>
<code> </code><code>使用者二:在tom送出前,已經把票買走了 </code>
===> Redis的消息機制
-> Redis 消息系統類型
--- 同步消息系統:需要對方的回答
--- 異步消息系統:不需要等待對方回答
-> Redis 消息類型
--- Queue: 隊列(點對對)
--- Topic: 主題 (廣播)
(*)Redis和Kafka:隻支援Topic
(*) JMS: Java Message Service ----> 都支援:Queue和Topic
推薦:Weblogic
-> Redis 消息相關指令
publish: 釋出消息 指定頻道
subscribe:訂閱消息 指定頻道
psubscribe:訂閱消息 使用通配符指定頻道
===> Redis的持久化: RDB、AOF
-> 持久化作用:進行恢複
-> RDB:快照的方式。每隔一段時間,把記憶體中的資料寫到rdb檔案中
--- 優點:恢複的速度快
--- 缺點:如果在兩次RDB之間發生了掉電,資料肯定丢失
--- 參數:
規則:從下往上
save 900 1 在15分鐘内,如果有1個key的value發生了變化,就産生RDB檔案
save 300 10 在5分鐘内,如果有10個key的value發生了變化,就産生RDB檔案
save 60 10000 在60秒内,如果有1w個key的value發生了變化,就産生RDB檔案
stop-writes-on-bgsave-error yes 如果在寫RDB檔案的時候産生了錯誤,停止新的資料寫入
rdbcompression yes 是否壓縮(優點:節約了空間 缺點:恢複的效率低),可以設定為:no
rdbchecksum yes 校驗和來檢查RDB檔案是否是好的
dbfilename dump.rdb 如果在叢集下,一台主機上運作多個Redis的執行個體,建議差別rdb檔案
dir ./ 儲存的目錄
-> AOF:append only file(記錄日志)
--- 優點:資料安全性高
--- 缺點:恢複速度慢,需要重做日志,達到恢複的目的
--- 預設禁用
<code> </code><code>appendonly no </code><code>=</code><code>=</code><code>=</code><code>> yes </code><code>#開啟AOF </code>
<code> </code><code>appendfilename </code><code>"appendonly.aof"</code> <code># 如果在叢集下,一台主機上運作多個Redis的執行個體,建議差別aof檔案</code>
<code> </code>
<code> </code><code># 什麼時候記錄日志???</code>
<code> </code><code># appendfsync always # 每個操作都記錄日志。最安全,性能最差</code>
<code> </code><code>appendfsync everysec </code><code># 預設:每秒</code>
<code> </code><code># appendfsync no # 由作業系統決定</code>
<code> </code><code>no</code><code>-</code><code>appendfsync</code><code>-</code><code>on</code><code>-</code><code>rewrite no </code><code># 重寫發生的時候,是否寫入aof的新日志</code>
<code> </code><code># 什麼時候執行AOF重寫?</code>
<code> </code><code>auto</code><code>-</code><code>aof</code><code>-</code><code>rewrite</code><code>-</code><code>percentage </code><code>100</code>
<code> </code><code>auto</code><code>-</code><code>aof</code><code>-</code><code>rewrite</code><code>-</code><code>min</code><code>-</code><code>size </code><code>64mb</code>
<code> </code>
<code> </code><code># 什麼是AOF的重寫:rewrite</code>
<code> </code><code>set</code> <code>i </code><code>0</code>
<code> </code><code>incr i</code>
<code> </code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>=</code><code>> 問題: AOF檔案太大了</code>
<code> </code><code>100</code><code>次</code>
<code> </code><code>*</code><code>*</code><code>*</code><code>*</code>
<code> </code><code>最終:i </code><code>=</code> <code>100</code>
<code> </code>
<code> </code><code># 示範:AOF的重寫</code>
<code> </code><code>模拟:</code><code>10</code><code>萬個操作</code>
<code> </code><code>bin</code><code>/</code><code>redis</code><code>-</code><code>benchmark </code><code>-</code><code>n </code><code>100000</code>
===> Redis 問題連結:(找了幾個比較經典的問題處理連結,留作收藏,以後備用)
-> http://blog.csdn.net/a491857321/article/details/52006376
本文轉自 菜鳥的征程 51CTO部落格,原文連結:http://blog.51cto.com/songqinglong/2066611