桂花上菜----Redis

  • 什麼是Redis
    Redis(RemoteDictionary Server)(遠程字段服務器) 是完全開放開源免費的,由C語言編寫的,遵循BDS協議。是一個高性能的(KV)分佈式內存數據庫,基於內存運行並支持持久化的NoSQL數據庫,當前最熱門的NoSQL數據庫之一。

  • Redis的特點
    1 . Redis支持數據持久化,可以將內存中的數據保存到磁盤上,重啓的時候可以再次加載進行使用
    2 . Redis不僅支持簡單的KV數據類型,同時還支持list set zset hash等數據結構
    3 . Redis支持數據備份,即master-slave模式的數據備份

  • Redis能做什麼
    1.內存存儲和持久化:redis支持異步將內存中的書寫到硬盤上,同時不影響繼續服務取最新的N個數據的操作,如可以將最新的10條評論的ID放在Redis的list集合裏面
    2.模擬類似於HTTPSession這樣需要設定過期時間的功能
    3.發佈,訂閱消息系統
    4.定時器,計數器

  • Redis 具有操作
    添加鏈接描述

  • Redis 持久化RDB AOF
    RDB持久化自動觸發事件:

config配置,可自行設置
save 900 1      after 900 sec (15 min) if at least 1 key changed 		   15分鐘內有一次變更則觸發一次
save 300 10    	after 300 sec (5 min) if at least 10 keys changed  		   5分鐘內有十次變更則觸發一次
save 60 10000	after 60 sec if at least 10000 keys changed				   1分鐘內有一萬次變更則觸發一次
  • RDB持久化手動出發事件
    執行save指令,該指令會阻塞當前save服務器,直到RDB完畢爲止,這樣嚴重影響性能2.
  • RDB持久化自動出發事件
    執行bgsave命令,Redis會fork出一個新的子進程進行持久化,而主進程不會進行任何IO操作,這樣便使Redis性能得到提高,
    他的持久化和回覆數據主要利用rdbSave(生成RDB文件)和rdbSave(生成RDB文件)和rdbLoad(從文件加載內存) 兩個函數(從文件加載內存)兩個函數
  • AOF持久化事件(appendonly = yes)
    每當執行服務器(定時)任務或者函數時flushAppendOnlyFile 函數都會被調用, 這個函數執行以下兩個工作
    aof寫入保存:
    WRITE:根據條件,將 aof_buf 中的緩存寫入到 AOF 文件
    SAVE:根據條件,調用 fsync 或 fdatasync 函數,將 AOF 文件保存到磁盤中。
    fsync 的同步主要有1.appendfsync always 2.appendfsync everysec(默認,1秒) 3. appendfsync no
    由於aof的持久化內容是操作指令,爲保證恢復的效率,當達到一定條件時會觸發重寫(rewrite)事件,
    涉及配置 1.auto-aof-rewrite-percentage 100 2.auto-aof-rewrite-min-size 64mb
  • Redis 事物
    Redis事務和MySQL事務類似,要麼一組事務全部提交成功,要麼全部失敗
multi 開始事務  ---一系列操作--- exec 執行事務
multi 開始事務  ---一系列操作--- discard 執行事務
watch 用於監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷
Unwatch 命令用於取消 WATCH 命令對所有 key 的監視。
  • Redis 淘汰策略
    配置命令:maxmemory-policy volatile-lru
volatile-lru:只限設置了過期事件中,刪除近期最少使用的key(**默認**)
volatile-random:只限設置了過期事件中,刪除隨機的一個key
volatile-ttl:只限設置了過期事件中,刪除即將過期的key
allkeys-lru:所有key中,刪除最近最少使用的key
allkeys-random:所有key中,刪除隨機一個key
noeviction:不刪除策略
  1. Redis 集羣搭建
  • 緩存雪崩
    緩存在某一時間出現大量失效(設置的過期事件導致失效 ,Redis宕機導致失效)而這時大量請求過來會直接訪問數據庫,致使數據庫掛掉.這就是緩存雪崩.
    解決方: 1.Redis高可用,搭建集羣防止這個Redis掛掉,導致全盤崩潰 2.本地 ehcache 緩存+ hystrix(豪豬)限流降級 3.Redis持久化,啓動後直恢復數據
  • 緩存穿透
    穿透就是一直無法命中緩存(惡意訪問數據庫中沒有的數據,也就無法添加到緩存中),所有的請求直接訪問數據庫,增加數據庫負擔.嚴重時導致數據庫宕機.
    解決方案: 當數據庫沒有查到,則返回一個空值放到緩存中
  • 緩存擊穿
    某個熱點數據,被頻繁訪問,處於集中式高併發的狀態,當它失效的時候就直接請求數據庫,這就是緩存穿透
    解決方式:對熱點數據,設置永不過期,或基於zookeeper實現互斥鎖,等待第一個請求訪問完畢後再釋放鎖,這樣後面的數據就能訪問到該緩存了
  1. 緩存預熱
  2. 緩存更新
  3. 緩存降級
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章