1.數據存儲
數據保存在內存,這使得redis的訪問速度非常快;
可擴展,通過主從複製,分片。
2.數據結構
string,list,set,zset,hash
3.常用命令
keys*:查找所有鍵
flushall:刪除所有鍵
4.redis事務
通過multi開啓事務,然後將執行的命令加入隊列,最後使用EXEC執行加入隊列中的命令。
有兩種錯誤,1。語法錯誤2.運行時錯誤(如用操作列表的命令執行string類型的命令)
若是語法錯誤,事務將會回滾;若是運行時錯誤,自動略過錯誤命令,其他命令正常。
discard清除先前在事務中放入隊列的指令;watch監控鍵,不同客戶端修改監控鍵事務將終止。
5.pub/sub
Redis的支持發送/訂閱消息,通過pub將消息發送到管道(channel),由sub訂閱管道接收消息。
6.持久化
快照持久化:
bgsave將會調用fork創建一個子進程處理持久化數據,父進程繼續處理請求命令
save接收save命令後,將快照創建完畢後,才處理其他命令
配置文件save 60 1000,自動調用bgsave
aof持久化:
AOF持久化的實質就是將被執行的命令寫到AOF文件的末尾,以此來記錄數據發生的變化。
因此只要執行一次AOF文件中的命令就可以恢復AOF文件所記錄的數據集了。
調用對文件的寫入,將需要寫入的文件內容存儲到緩衝區,系統在某個時候將緩衝區信息寫入硬盤
問題一:爲什麼訪問查詢那麼快
1.完全基於內存,絕大部分操作純粹內存操作;
2.單線程,避免了不必要的上下分切換和競爭條件,不用考慮各種鎖操作,加鎖釋放鎖;
3.多路複用,非阻塞io
問題二:緩存雪崩
1.不同的key設置不同的過期時間
2.通過加鎖和隊列控制讀數據庫和寫緩存的線程數量
3.二級緩存
問題三:緩存擊穿
1.對key一定不存在的數據過濾
2.對沒有數據key的也設值如null
問題四:緩存一致性
1.數據實時同步更新
修改數據庫的同時,修改緩存,數據一致性比較強,數據同步沒有延時
2.數據準實時更新
使用多線程,MQ實現,數據同步有較短時間延時
3.緩存失效機制
對緩存數據設置失效時間,有一定的延時時間(設置的失效時間),可能存在緩存雪崩
4.任務調度更新
最終一致性,按一定的頻率更新;
個人搜索資料整理的,爲了應對面試,也希望分享出來幫助大家。
如有不對的地方非常希望能夠指點一下, 由於寫的較早,已忘記參考博客鏈接, 在此感謝,同時非常抱歉下次定會注意.