1. 程式人生 > 實用技巧 >洛谷 P1155

洛谷 P1155

  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