Redis
1、Redis功能介紹
高速讀寫
數(shù)據(jù)類型豐富 ******************
支持持 久化 ******************
多種內(nèi)存分配及回收策略
支持事務(wù) ******************
消息隊(duì)列整以、消息訂閱
支持高可用
支持分布式分片集群 (面試) ******************
緩存穿透\雪崩(筆試胧辽、面試) ******************
Redis API ************
2、Redis使用場景介紹
Memcached:多核的緩存服務(wù)公黑,更加適合于多用戶并發(fā)訪問次數(shù)較少的應(yīng)用場景
Redis:單核的緩存服務(wù)邑商,單節(jié)點(diǎn)情況下摄咆,更加適合于少量用戶,多次訪問的應(yīng)用場景人断。
Redis一般是單機(jī)多實(shí)例架構(gòu)吭从,配合redis集群出現(xiàn)。
3. Redis安裝部署
-
下載安裝
下載: wget http://download.redis.io/releases/redis-3.2.12.tar.gz 解壓: 上傳至 /data tar xzf redis-3.2.12.tar.gz mv redis-3.2.12 redis 安裝: cd redis make 啟動(dòng): src/redis-server & 環(huán)境變量: vim /etc/profile export PATH=/data/redis/src:$PATH source /etc/profile redis-server &
-
配置文件
[root@standby ~]# redis-cli shutdown mkdir /data/6379 cat >>/data/6379/redis.conf <<EOF daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 dbfilename dump.rdb EOF 重啟redis redis-cli shutdown redis-server /data/6379/redis.conf netstat -lnp|grep 63 配置文件說明 是否后臺運(yùn)行: daemonize yes 默認(rèn)端口: port 6379 日志文件位置: logfile /var/log/redis.log 持久化文件存儲位置: dir /data/6379 RDB持久化數(shù)據(jù)文件: dbfilename dump.rdb
-
客戶端命令常用參數(shù)說明
redis-cli 剛裝完,可以在redis服務(wù)器上直接登錄redis -p 6379 指定端口號 -h 指定鏈接地址 -a 指定鏈接密碼 redis-cli set num 10 ,無交互執(zhí)行redis命令 cat /tmp/1.txt |redis-cli [root@db01 ~]# redis-cli -h 10.0.0.51 -p 6379 10.0.0.51:6379>
-
redis安全配置
redis默認(rèn)開啟了保護(hù)模式恶迈,只允許本地回環(huán)地址登錄并訪問數(shù)據(jù)庫涩金。 禁止protected-mode 1. Bind :指定IP進(jìn)行監(jiān)聽 echo "bind 10.0.0.200 127.0.0.1" >>/data/6379/redis.conf 2. 增加requirepass {password} echo "requirepass 123" >>/data/6379/redis.conf 3. 重啟redis redis-cli shutdown redis-server /data/6379/redis.conf
-
在線查看和修改配置
CONFIG GET * CONFIG GET requirepass CONFIG SET requirepass 123
-
redis持久化(內(nèi)存數(shù)據(jù)保存到磁盤)
作用:可以有效防止,在redis宕機(jī)后,緩存失效的問題.
RDB 持久化
可以在指定的時(shí)間間隔內(nèi)生成數(shù)據(jù)集的時(shí)間點(diǎn)快照(point-in-time snapshot)。 優(yōu)點(diǎn):速度快暇仲,適合于用做備份步做,主從復(fù)制也是基于RDB持久化功能實(shí)現(xiàn)的。 缺點(diǎn):會有數(shù)據(jù)丟失 rdb持久化核心配置參數(shù) vim /data/6379/redis.conf dir /data/6379 dbfilename dump.rdb save 900 1 save 300 10 save 60 10000 配置分別表示: 900秒(15分鐘)內(nèi)有1個(gè)更改 300秒(5分鐘)內(nèi)有10個(gè)更改 60秒內(nèi)有10000個(gè)更改
AOF 持久化(append-only log file)
記錄服務(wù)器執(zhí)行的所有寫操作命令奈附,并在服務(wù)器啟動(dòng)時(shí)全度,通過重新執(zhí)行這些命令來還原數(shù)據(jù)集。 AOF 文件中的命令全部以 Redis 協(xié)議的格式來保存斥滤,新命令會被追加到文件的末尾将鸵。 優(yōu)點(diǎn):可以最大程度保證數(shù)據(jù)不丟 缺點(diǎn):日志記錄量級比較大 AOF持久化配置 vim /data/6379/redis.conf appendonly yes # 是否打開aof日志功能,每1個(gè)命令,都立即同步到aof appendfsync everysec # 每秒寫1次 appendfsync always appendfsync no
總結(jié)
持久化方式有哪些?有什么區(qū)別佑颇? rdb:基于快照的持久化顶掉,速度更快,一般用作備份漩符,主從復(fù)制也是依賴于rdb持久化功能 aof:以追加的方式記錄redis操作日志的文件一喘。可以最大程度的保證redis數(shù)據(jù)安全嗜暴,類似于mysql的binlog
4. 發(fā)布訂閱
PUBLISH channel msg
? 將信息 message 發(fā)送到指定的頻道 channel
SUBSCRIBE channel [channel ...]
? 訂閱頻道凸克,可以同時(shí)訂閱多個(gè)頻道
UNSUBSCRIBE [channel ...]
? 取消訂閱指定的頻道, 如果不指定頻道,則會取消訂閱所有頻道
PSUBSCRIBE pattern [pattern ...]
? 訂閱一個(gè)或多個(gè)符合給定模式的頻道闷沥,每個(gè)模式以 * 作為匹配符萎战,比如 it* 匹配所 有以 it 開頭的頻道( it.news 、 it.blog 舆逃、 it.tweets 等等)蚂维, news.* 匹配所有 以 news. 開頭的頻道( news.it 、 news.global.today 等等)路狮,諸如此類
PUNSUBSCRIBE [pattern [pattern ...]]
? 退訂指定的規(guī)則, 如果沒有參數(shù)則會退訂所有規(guī)則
PUBSUB subcommand [argument [argument ...]]
? 查看訂閱與發(fā)布系統(tǒng)狀態(tài)
注意:使用發(fā)布訂閱模式實(shí)現(xiàn)的消息隊(duì)列虫啥,當(dāng)有客戶端訂閱channel后只能收到后續(xù)發(fā)布到該頻道的消息,之前發(fā)送的不會緩存奄妨,必須Provider和Consumer同時(shí)在線涂籽。
發(fā)布訂閱例子:
窗口1:
127.0.0.1:6379> SUBSCRIBE baodi
窗口2:
127.0.0.1:6379> PUBLISH baodi "jin tian zhen kaixin!"
訂閱多頻道:
窗口1:
127.0.0.1:6379> PSUBSCRIBE wang*
窗口2:
127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou "
5. Redis事務(wù)
redis的事務(wù)是基于隊(duì)列實(shí)現(xiàn)的
mysql的事務(wù)是基于事務(wù)日志實(shí)現(xiàn)的
multi 開啟事務(wù)
discard 取消執(zhí)行
exec 執(zhí)行
開啟事務(wù)功能時(shí)(multi)
multi
command1
command2
command3
command4
4條語句作為一個(gè)組,并沒有真正執(zhí)行砸抛,而是被放入同一隊(duì)列中评雌。
如果树枫,這是執(zhí)行discard,會直接丟棄隊(duì)列中所有的命令景东,而不是做回滾砂轻。
當(dāng)執(zhí)行exec時(shí),對列中所有操作斤吐,要么全成功要么全失敗
redis是樂觀鎖, mysql為悲觀鎖
樂觀鎖: 在事物開始時(shí)修改了某條數(shù)據(jù), 還未提交時(shí)另一個(gè)事物也能修改這條數(shù)據(jù)并且提交
悲觀鎖: 在事物開始時(shí)修改了某條數(shù)據(jù), 還未提交時(shí), 其他事物不得修改這條數(shù)據(jù)
.
6. 樂觀鎖與悲觀鎖
redis默認(rèn)為樂觀鎖
窗口1開啟事務(wù)修改了num的值, 還未提交, 窗口2 也在修改num, 并且提交了, 最后兩個(gè)窗口都提交成功了 ,所以num的值會被修改兩次
通過watch
可以避免兩個(gè)事物同時(shí)修改了一條記錄這一情況
窗口1開啟事務(wù)修改了a的值, 還未提交, 窗口2 也在修改a, 并且提交了, 這時(shí)窗口1再提交就會提交失敗
窗口1開啟事務(wù)修改了money的值, 還未提交, 窗口2 再修改同一數(shù)據(jù)時(shí)會阻塞住
7. 服務(wù)器管理命令
Info
Clinet list
Client kill ip:port
config get *
CONFIG RESETSTAT 重置統(tǒng)計(jì)
CONFIG GET/SET 動(dòng)態(tài)修改
Dbsize
FLUSHALL 清空所有數(shù)據(jù)
select 1
FLUSHDB 清空當(dāng)前庫
MONITOR 監(jiān)控實(shí)時(shí)指令
SHUTDOWN 關(guān)閉服務(wù)器
關(guān)閉數(shù)據(jù)庫:
redis-cli -a root shutdown