優勢:速度快、類型豐富、豐富的特性、持久化存儲,單線程。redis
(1)令牌生成(臨時有效期)算法
(2)短信驗證碼(臨時有效期)spring
(3)熱點數據(使用redis減輕數據庫的壓力)數據庫
(4)使用redis實現消息中間件,發佈訂閱功能(不推薦)數組
(這裏多說一下消息中間件的做用: 應用解耦,異步處理,錯峯與流控)緩存
(5)分佈式鎖(使用zk或者redis 實現分佈式鎖)springboot
(6)網站計數器(由於redis是單線程的,在高併發狀況下,保證記錄的惟一性)服務器
(7)此外還有redis解決雪崩效應,redis多種集羣方案,reids持久化機制,reids哨兵機制網絡
(1)String類型 字符串 數據結構
(2)List 列表 簡單的字符串列表,採用的雙向鏈表結構
(3)Hash 字典 在值比較少時使用數組,值比較多的時候轉換成hashmap數據結構
(4)Set 集合 String類型的無序集合,值是惟一的
(5)Sorted Set 有序集合 值是惟一的,而且每一個成員都會關聯一個分數,並經過該分數排序。
(1)爲何不用定時刪除策略
由於這樣須要用一個定時任務來監測全部點key,雖然內存能及時釋放,可是十分消耗資源。在大併發下cpu要將時間用來處理請求。
(2)按期刪除+惰性刪除
每隔100ms,隨機抽查一些key是否是過時,而後剩下的在獲取某個key的時候去校驗是否過時。
(3)配置內存淘汰機制
在redis.conf中有一行配置
通常配置allkeys-lru 隨機刪除最近使用最少的key
默認 volatile-lru – >使用LRU算法,僅對設置了過時時間的鍵採起LRU
淘汰
(1)概述
redis持久化機制分爲RDB和AOF兩種,默認是快照RDB方式
(2)RDB持久化方式
redis.conf默認配置:
save 900 1 900秒內,超過一個key被修改,則保存
save 300 10 300秒內超過10個key被修改,則保存
保存後默認生成一個dump.rdb的文件。
(3)AOF方式
redis.conf 默認配置
appendonly no 默認爲30秒一次
可修改成:
appendfsync always 每次修改都會保存
appendfsync everysec 每秒一次
appendfsync no 每30秒一次
默認保存文件爲appendonly.aof
注:aof模式有個問題就是aof文件會變的很大。每每經過aof分析裏面有太多冗餘數據時,會進行重寫,這個操做知足必定條件是,Redis會自動觸發。通常生產環境通常要求 在達到幾個g或者幾十個g纔會重寫,由於重寫會影響redis性能。
重寫參數:
auto-aof-rewrite-percentage 100 重寫增加比例,如上次重寫是100,則在200時觸發。
auto-aof-rewrite-min-size 64mb 最小觸發重寫的文件大小
(1)什麼是主從複製
將服務器分爲主服務器和從服務器,主服務器能夠容許讀寫操做,從服務器只能有讀操做。主服務器只能有一個。
(2)主從複製的應用場景
集羣,讀寫分離,日誌備份,高可用
(3)什麼是讀寫分離
讀和寫分庫鏈接,讀一個庫,寫一個庫,互不影響,增長總體吞吐量,讀寫分離須要解決兩個庫之間的數據同步問題,redis已解決
(4)主從複製原理圖
(5)主從複製存在的問題
當數據同步延遲吃形成的主庫和從庫的不一致的問題。
①若是qq消息,論壇等容許短期內不一致的業務,就能夠不做處理。
②強制讀主,從庫只用來主庫掛掉事後的一個備份。
③不一樣的業務,在進行表操做時用緩存記錄下來,好比庫:表:主鍵 並設置一個過時時間,過時時間爲主從延時時間,若是讀到了key說明還在同步,須要去讀主庫,若是沒有 讀到key則去讀從庫。具體讀哪個由路由來完成。
在「從服務器」的redis.conf的 salveof 後面添加主服務器的ip地址+端口,若是主服務器配置了密碼 須要加上masterauth
將redis-4.0.8.tar.gz包放在/usr/local下
①解壓tar -zxvf redis-4.0.8.tar.gz
② cd redis-4.0.8
③運行make
報錯:
zmalloc.h:50:31: 致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄
解決:使用這個make MALLOC=libc 替換 make
④make install PREFIX=/usr/local/redis
⑤移動配置文件到安裝目錄下
cd ../
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc
⑥配置redis爲後臺啓動
vi /usr/local/redis/etc/redis.conf //將daemonize no 改爲daemonize yes
vi /usr/local/redis/etc/redis.conf // requirepass 123
⑦開啓redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
⑧鏈接Redis客戶端
./redis-cli -h 127.0.0.1 -p 6379 -a "123456"
PING 結果表示成功
⑨關閉防火牆
//臨時關閉
systemctl stop firewalld
//禁止開機啓動
systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
⑩中止Redis服務
./redis-cli -h 127.0.0.1 -p 6379 -a "123456" shutdown
修改redis.conf
註釋掉
#bind 127.0.0.1 開啓外網訪問
(1)做用:心跳檢查,故障轉移(選舉策略),監控。
注:哨兵注意事項:哨兵通常不和其餘redis服務器在一塊兒,啓動的時候先啓動哨兵的狀況下,最好先啓動主的redis,否則哨兵會覺得主掛掉了,進行選舉。
(2)配置
①配置拷貝到etc目錄
cp sentinel.conf /usr/local/redis/etc
②修改sentinel.conf配置文件
sentinel monitor mymast 192.168.110.133 6379 1 #主節點 名稱 IP 端口號 選舉次數
一個Sentinel節選舉成爲Leader的最低票數爲quorum(就是6379後面那個1)
和Sentinel節點 數/2+1
的最大值。
sentinel auth-pass mymaster 123456
③ 修改心跳檢測 30毫秒
sentinel down-after-milliseconds mymaster 30
④sentinel parallel-syncs mymaster 2
sentinel parallel-syncs <master-name> <numslaves>
注:這個配置項指定了在發生failover主備切換時最多能夠有多少個slave同時對新的master進行 同步,這個數字越小,完成failover所需的時間就越長,可是若是這個數字越大, 就意味着越 多的slave由於replication而不可用。能夠經過將這個值設爲 1 來保證每次只有一個slave 處於不能處理命令請求的狀態。
⑤啓動哨兵模式
./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
⑥中止哨兵模式
ps -ef | grep redis
⑦若須要springboot 集成哨兵模式則須要
把哨兵配置文件中的protected-mode no 的註釋放開
搭建哨兵的時候要注意,全部服務器都須要配置密碼
masterauth 123456
主服務器不用配置 slaveof
muti()開啓
exec()提交
dicard() 回滾
一級(ehcache)+ 二級(redis) 目的是儘可能使用本地緩存:做用①若是本地沒有再走網絡。效率會更高。 ②減輕redis訪問壓力,提升訪問速度。③若是redis掛了,直接穿透到 數據庫容易形成雪崩效應。
注意事項:1.一級緩存的過時時間,必定要比二級緩存的過時時間要少能有效控制一二級緩存不一樣步的問題。
2. 使用job定時任務去比較一二級緩存裏面的值,或者使用二級緩存更新後發送到mq裏面,而後在拿去更新一級緩存,這麼作比較耗資源。
(代碼若是須要的話,能夠在下方評論)
流程圖以下