洛谷 P1155
阿新 • • 發佈:2020-09-01
1.redis五種基本的資料結構
- string---String
- hash---HashMap
- list--- LinkedList
- set---HashSet
- sorted-set---TreeSet
string型別基本操作
#新增/修改資料 set key value #獲取資料 get key #刪除資料 del key #新增/修改多個數據 Multiple mset key1 value1 key2 value2... #獲取多個數據 mget key1 key2... #獲取資料字元個數(長度) strlen key #追加資訊到原始資訊後部(如果原始資訊存在就追加,不存在新建) append key value #設定數值資料增加指定範圍的值 incr key #預設增加1 incrby key increment #增加為負數就是減少 incrbyfloat key increment #專門針對小數 #設定數值資料減少 decr key decrby key increment #設定資料具有指定的宣告週期 setex key seconds value psetex key milliseconds value
hash型別基本操作
#新增/修改資料 hset key field value #獲取資料 hget key field hgetall key #獲取所有資料 #刪除資料 hdel key field1 field2... #新增或修改多個數據 hmset key field1 value1 field2 value2... #獲取多個數據 hmget key field1 field2... #獲取雜湊表中欄位的數量 hlen key #獲取雜湊表中是否存在指定的欄位 hexists key field #獲取雜湊表中所有的欄位名或欄位值 hkeys key hvals key #設定指定欄位的數值資料增加指定範圍的值 hincrby key field increment hincrbyfloat key field increment
list型別基本操作
#新增或修改資料
lpush key value1 [value2]... #左邊新增修改
rpush key value1 [value2]... #右邊新增修改
#獲取資料
lrange key start stop #list資料從0開始
lindex key index
llen key
#獲取並移除資料 ,一個一個的移除
lpop key
rpop key
#規定時間後去並移除資料
blpop key1 [key2] timeout
brpop key1 [key2] timeout
#移除指定資料
lrem key count value
set型別資料基本操作
#新增資料
sadd key member1 [member2]
#獲取全部資料
smembers key
#刪除資料
srem key menber1 [menber2]
#獲取集合資料總量
scard key
#判斷集合中是否包含指定資料
sismember key member
.....
擴充套件操作比較多:集合的交併差等等
sorted_set型別資料的基本操作
#新增資料
zadd key score1 member1 [score2 member2]
#獲取全部資料
zrange key start stop
#刪除資料
zrem key member [member ...]
.....
擴充套件操作也比較多
2.RDB和AOP資料持久化
RDB:記錄資料的變化
AOF:記錄操作步驟的變化
#預設方式就是RDB方式持久化
save #RDB方式的持久化命令
#save指令的相關配置
dbfilename dump-埠號.rdb #設定本地資料庫檔名
dir 路徑 #設定儲存路徑
rdbcompression yes #設定儲存到本地資料庫時是否壓縮資料
rdbchecksum yes #是否進行rdb檔案格式校驗
#save指令會阻塞redis服務,一般線上不使用,而是使用bgsave
bgsave #不是立即執行的,非阻塞
#AOF持久化
#AOF功能開啟yes|no
appendonly yes
#AOF持久化檔名
appendfilename "appendonly-6379.aof"
#AOF寫資料的三種策略always|everysec|no
appendfsync everysec
AOF重寫
解決的問題:
- 無效的資料不再寫入檔案
- 忽略無效指令
- 對同一資料的多條寫命令合併為一條命令
#第一種後臺指令
bgrewriteaof
#自動重寫
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
3.redis事務
#開啟事務
multi #設定事務的開啟位置
#執行事務
exec #設定事務的結束位置
#取消事務
discard #事務定義過程中出現了問題,資料賦值錯誤等
#事務過程中,命令格式輸入錯誤 整體事務不會執行
#事務過程中,命令執行出現錯誤,正確的執行錯誤的不執行
注意!對已經執行完畢的命令對應的資料不會自動回滾,需要程式設計師自己在程式碼中實現回滾
4.鎖
#監視鎖的作用是監控key變不變的
#對key新增監視鎖
watch key1 [key2.....]
#取消對所有key的監視
unwatch
#分散式鎖解決的問題
#設定公共的鎖
setnx lock-key value
del lock-key釋放鎖
#分散式鎖改良
#為鎖key新增時間限定,到時不釋放,放棄鎖
expire lock-key second
pexpire lock-key millseconds
5.資料刪除策略
- 定時刪除
- 惰性刪除
- 定期 刪除
刪除策略對比
定時刪除 | 節約記憶體,無佔用 | 不分時段佔用cpu資源,頻度高 | 拿時間換空間 |
惰性刪除 | 記憶體佔用嚴重 | 延時執行,cpu利用率高 | 拿空間換時間 |
定期刪除 | 記憶體定期隨機清理 | 每秒花費固定的cpu資源維護記憶體 | 隨機抽查,重點抽查 |
6.資料逐出演算法
redis使用記憶體儲存資料,在執行每一個命令前,會呼叫freeMemoryIfNeeded()檢測記憶體是否充足。如果記憶體不滿足新加入資料的最低儲存要求,就需要刪除一些資料為當前指令清理儲存空間
#最大可使用記憶體
maxmemory
#每次選取待刪除資料的個數
maxmemory-samples
#刪除策略 8種
maxmemory-policy #不詳細展開
7.redis高階資料型別
- Bitmaps 位
- HyperLogLog 基數統計
- GEO 座標
8.主從複製(叢集中的問題)
為了避免單點redis伺服器故障,準備多臺伺服器,互相連通。將資料複製多個副本儲存在不同的伺服器上,連線在一起,並保證資料是同步的。即使有其中一臺伺服器宕機,其他伺服器依然可以繼續提供服務,實現reids的高可用,同時實現資料冗餘備份
原理!!!重點
9.哨兵模式
用於主從結構中每臺伺服器進行監控,當出現故障時及時通過投票機制選擇新的maste並將所有的slave連線到新的master。
哨兵的作用:
- 監控:不斷的檢查master和slave是否正常執行
- 通知:當被監控的伺服器出現故障,向其他(哨兵,客戶端)傳送通知
- 自動故障轉移:斷開連線,選取無故障的連線
10.企業級解決方案
- 快取預熱
系統啟動前,提前將相關的快取資料直接載入到快取系統。避免使用者請求,先查詢資料庫再將資料快取的問題
- 快取雪崩
瞬間過期資料量太大,導致對資料庫伺服器造成壓力,未命中redis後,發起了大量對同一數的資料庫訪問
- 快取擊穿
單個高熱資料過期的瞬間,資料訪問量較大
- 快取穿透
訪問了不存在的資料,跳過了合法資料的redis資料快取階段,每次訪問資料庫,導致對資料庫造成壓力
- 效能指標監控
-
- 效能指標:Performance
- 記憶體指標: Memory
- 基本活動指標: Basic activity
- 永續性指標: Persistence
- 錯誤指標:Error
-