使用redis很長時間了,但只是限於使用,一直也沒有進行系統的學習與底層研究,現系統的學習一下redis並記錄筆記。
Redis
1、Nosql 非關系型數據庫,key-value鍵值對存貯。
2、內存型數據庫,支持持久化,可將數據保存在硬盤上。
3、單線程處理請求,但采用io多路復用技術。
4、讀寫性能好,支持集群。
Redis數據類型
1、String 類型:最基礎的數據類型,簡單的key-value鍵值對,value可以是任何數據,不限制類型,但大小最多不能超過512M。
2、list 類型:列表類型,類似一個隊列,左側為表頭,右側為表尾,左右兩側都可以插入數據;底層實現為鏈表。
3、set 類型:無序集合類型,key-values 集合,values內部的元素不重復。
4、zset 類型:有序集合類型,數據結構類似於java中的Map<String,List<Object>>,key-values結構,values內部元素有序。
5、hash 類型:hash表結構,類似於java中的Map<String,Map<String,Object>>。
Redis持久化方式
1、RDB持久化:快照snapshot持久化方式,把當前內存中的數據集快照寫入硬盤,恢復數據時直接讀取硬盤上的快照文件。
2、AOF持久化:通過記錄redis服務器所執行的寫命令日志進行持久化,恢復數據是,執行保存的寫命令進行數據恢復。
Redis過期刪除策略
1、redis存入數據時可以設置過期時間,如果不設置,則永不過期;
2、redis到期刪除策略是定期隨機抽樣+惰性刪除。
Redis內存淘汰機制
1、no-enviction:禁止淘汰數據,內存不足則報錯。
2、allkeys-random:從內存數據集中隨機淘汰數據。
3、allkey-lru:從內存數據集中淘汰最近最少使用數據(最常用)。
4、volatile-random:從設置過過期時間的數據集中隨機淘汰數據,未設置過期時間的數據不受影響。
5、volatile-lru:從設置過過期時間的數據集中淘汰最近最少使用數據。
6、volatile-ttl:從設置過過期時間的數據集中淘汰將要過期的數據。