Redis內(nèi)存數(shù)據(jù)庫(kù)簡(jiǎn)介: Redis 是完全開源免費(fèi)的..."/>
您好,登錄后才能下訂單哦!
===> Redis內(nèi)存數(shù)據(jù)庫(kù)簡(jiǎn)介:
Redis 是完全開源免費(fèi)的,遵守BSD協(xié)議,是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)。
===> Redis 的特點(diǎn):
->基于內(nèi)存
-> 持久化: RDB、AOF
-> 消息機(jī)制:支持String,只支持Topic的消息(廣播)
-> 豐富的數(shù)據(jù)類型
-> 支持簡(jiǎn)單的事務(wù)
-> 支持主從復(fù)制
-> HA(哨兵): 對(duì)版本有要求,需要 2.4 版本以上
===> Redis的安裝和配置: 需要gcc的編譯器
-> Redis 單機(jī)部署:
tar -zxvf redis-3.0.5.tar.gz make make PREFIX=/app/redis install
-> Redis的相關(guān)命令
redis-benchmark 提供的一個(gè)壓力測(cè)試工具,模擬:10萬(wàn)操作
redis-check-aof 檢查AOF日志文件
redis-check-dump 檢查RDB快照文件
redis-cli 命令行
redis-sentinel 哨兵(Redis的HA) -----> 配置文件:sentinel.conf 2.4版本以上
redis-server 服務(wù)器
-> 配置文件
--- redis.conf
daemonize yes 改成yes 后,啟動(dòng)后會(huì)在后臺(tái)運(yùn)行
port 6379
-> 服務(wù)啟動(dòng)命令:redis-server conf/redis.conf
-> 客戶端連接命令: redis-cli -p 6379 | redis-cli -h 192.168.10.210 -p 6379
===> Redis 集群的安裝和配置:(星型架構(gòu),線型架構(gòu))
-> 此處只講解星型架構(gòu)(此架構(gòu)結(jié)構(gòu)為單臺(tái)服務(wù)器上使用不同端口啟動(dòng)三個(gè)服務(wù)組成集群,多臺(tái)服務(wù)器同理)
--- 主:6379端口 (關(guān)閉 RDB 和 AOF)
--- 從:6380, 6381端口 (開啟 RDB 和 AOF)
-> 配置文件:
redis6379.conf daemonize yes #save 900 1 #save 300 10 #save 60 10000 pidfile /app/redis/pids/redis_6379.pid logfile "/app/redis/logs/redis_6379/redis.log" dbfilename dump.rdb dir "/data/redis_data/redis_6379" appendonly no appendfilename "appendonly6379.aof" redis6380.conf port 6380 slaveof 192.168.157.11 6380 pidfile /app/redis/pids/redis_6380.pid logfile "/app/redis/logs/redis_6380/redis.log" dbfilename dump.rdb dir "/data/redis_data/redis_6380" appendonly yes appendfilename "appendonly6380.aof" redis6381.conf port 6381 slaveof 192.168.157.11 6379 pidfile /app/redis/pids/redis_6381.pid logfile "/app/redis/logs/redis_6381/redis.log" dbfilename dump.rdb dir "/data/redis_data/redis_6381" appendonly yes appendfilename "appendonly6381.aof"
(*)注意:默認(rèn):從節(jié)點(diǎn)只讀
(error) READONLY You can't write against a read only slave. 修改參數(shù): slave-read-only yes
-> Redis的HA:哨兵機(jī)制(要在解壓的安裝包中copy sentinel.conf 文件到 /conf 目錄下)
sentinel monitor mymaster 192.168.10.210 6379 1 # IP 端口 哨兵個(gè)數(shù) sentinel auth-pass <master-name> <password> # 配置連接主節(jié)點(diǎn)的密碼 sentinel down-after-milliseconds mymaster 30000 # 表示 30 秒內(nèi)如果沒有收到主節(jié)點(diǎn)的心跳,哨兵就認(rèn)為主節(jié)點(diǎn)down sentinel parallel-syncs mymaster 1 # 選舉出新的主節(jié)點(diǎn)后,可以同時(shí)連接其他從節(jié)點(diǎn)的個(gè)數(shù) sentinel failover-timeout mymaster 180000 # 失敗切換時(shí),允許的最大時(shí)間
---哨兵啟動(dòng)命令:redis-sentinel sentinel.conf
-> Redis的分片:
---Twemproxy 是一種代理分片機(jī)制, 由 Twitter 開源
Twemproxy 作為代理,可接受來(lái)自多個(gè)程序 的訪問,按照路由規(guī)則,轉(zhuǎn)發(fā)給后臺(tái)的各個(gè) Redis 服務(wù)器, 再原路返回
--- 安裝Twemproxy
git clone https://github.com/twitter/twemproxy.git cd twemproxy/ CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --prefix=/app/proxy --enable-debug=log && make && make install
--- 配置文件:nutcracker.yml (需要在解壓的安裝包/conf 目錄下copy 到安裝目錄的 conf 目錄下)
alpha: listen: 127.0.0.1:22121 hash: fnvla_64 distribution: ketama auto_eject_hosts: true redis: true server_retry_timeout: 2000 server_failure_limit: 1 servers: - 192.168.10.210:6380 - 192.168.10.210:6381
--- 檢查配置文件是否正確: ./nutcracker -t conf/nutcracker.yml
--- 啟動(dòng)代理服務(wù)器: ./nutcracker -d -c conf/nutcracker.yml
--- 此時(shí)連接Redis 需要使用 Twemproxy 配置的端口連接: redis-cli -p 22121
===> Redis的操作:基于key-value形式
->
---
===> Redis的事務(wù): 不是真正的事務(wù)
-> Redis的事務(wù)的本質(zhì):將一組操作放入隊(duì)列中,批量執(zhí)行
-> 對(duì)比Oracle和Redis的事務(wù)
-> Redis 的事務(wù)實(shí)例:(銀行轉(zhuǎn)賬)
set tom 1000 set mike 1000 multi decrby tom 100 incrby mike 100 exec
===> Redis的鎖機(jī)制
-> 核心:當(dāng)事務(wù)提交的時(shí)候,如果監(jiān)控的值,發(fā)生變化,則提交失敗
命令:watch
-> Redis 的鎖實(shí)例:(買票)
set ticket 1 set tom 1000 用戶一:tom multi decr ticket decrby tom 100 exec -------> 提交的時(shí)候,慢了一點(diǎn) 1) (integer) -1 ====> 票數(shù)不可能是-1 2) (integer) 900 用戶二:在tom提交前,已經(jīng)把票買走了 decr ticket
===> Redis的消息機(jī)制
-> Redis 消息系統(tǒng)類型
--- 同步消息系統(tǒng):需要對(duì)方的回答
--- 異步消息系統(tǒng):不需要等待對(duì)方回答
-> Redis 消息類型
--- Queue: 隊(duì)列(點(diǎn)對(duì)對(duì))
--- Topic: 主題 (廣播)
(*)Redis和Kafka:只支持Topic
(*) JMS: Java Message Service ----> 都支持:Queue和Topic
推薦:Weblogic
-> Redis 消息相關(guān)命令
publish: 發(fā)布消息 指定頻道
subscribe:訂閱消息 指定頻道
psubscribe:訂閱消息 使用通配符指定頻道
===> Redis的持久化: RDB、AOF
-> 持久化作用:進(jìn)行恢復(fù)
-> RDB:快照的方式。每隔一段時(shí)間,把內(nèi)存中的數(shù)據(jù)寫到rdb文件中
--- 優(yōu)點(diǎn):恢復(fù)的速度快
--- 缺點(diǎn):如果在兩次RDB之間發(fā)生了掉電,數(shù)據(jù)肯定丟失
--- 參數(shù):
規(guī)則:從下往上
save 900 1 在15分鐘內(nèi),如果有1個(gè)key的value發(fā)生了變化,就產(chǎn)生RDB文件
save 300 10 在5分鐘內(nèi),如果有10個(gè)key的value發(fā)生了變化,就產(chǎn)生RDB文件
save 60 10000 在60秒內(nèi),如果有1w個(gè)key的value發(fā)生了變化,就產(chǎn)生RDB文件
stop-writes-on-bgsave-error yes 如果在寫RDB文件的時(shí)候產(chǎn)生了錯(cuò)誤,停止新的數(shù)據(jù)寫入
rdbcompression yes 是否壓縮(優(yōu)點(diǎn):節(jié)約了空間 缺點(diǎn):恢復(fù)的效率低),可以設(shè)置為:no
rdbchecksum yes 校驗(yàn)和來(lái)檢查RDB文件是否是好的
dbfilename dump.rdb 如果在集群下,一臺(tái)主機(jī)上運(yùn)行多個(gè)Redis的實(shí)例,建議區(qū)別rdb文件
dir ./ 保存的目錄
-> AOF:append only file(記錄日志)
--- 優(yōu)點(diǎn):數(shù)據(jù)安全性高
--- 缺點(diǎn):恢復(fù)速度慢,需要重做日志,達(dá)到恢復(fù)的目的
--- 默認(rèn)禁用
--- 參數(shù):
appendonly no ===> yes #開啟AOF appendfilename "appendonly.aof" # 如果在集群下,一臺(tái)主機(jī)上運(yùn)行多個(gè)Redis的實(shí)例,建議區(qū)別aof文件 # 什么時(shí)候記錄日志??? # appendfsync always # 每個(gè)操作都記錄日志。最安全,性能最差 appendfsync everysec # 默認(rèn):每秒 # appendfsync no # 由操作系統(tǒng)決定 no-appendfsync-on-rewrite no # 重寫發(fā)生的時(shí)候,是否寫入aof的新日志 # 什么時(shí)候執(zhí)行AOF重寫? auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 什么是AOF的重寫:rewrite set i 0 incr i incr i ======> 問題: AOF文件太大了 100次 **** incr i 最終:i = 100 # 演示:AOF的重寫 模擬:10萬(wàn)個(gè)操作 bin/redis-benchmark -n 100000
===> Redis 問題鏈接:(找了幾個(gè)比較經(jīng)典的問題處理鏈接,留作收藏,以后備用)
-> http://blog.sina.com.cn/s/blog_a1e9c7910102vmx5.html
-> http://blog.csdn.net/a491857321/article/details/52006376
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。