心智圖資源庫 MYSQL
這是一篇關於MYSQL的心智圖,主要內容包括:redis redis是資料庫,結構:key-value,索引,連接,MYSQL-DML(Data Manipulation Language)操作。
編輯於2024-04-21 20:48:41MYSQL
redis redis是資料庫,結構:key-value
持久化 是將短暫的、易失的資料轉化為長時間保存且不易遺失的格式的過程
RDB(Redis DataBase) RDB持久化是Redis資料庫的持久化方式,透過定期將Redis記憶體中的資料快照(Snapshot)儲存到磁碟上的RDB檔案中,實現資料的持久化儲存。具體來說,RDB持久化在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,實際操作過程是fork一個子進程,先將資料集寫入臨時文件,寫入成功後,再替換之前的文件,用二進制壓縮儲存。這種方式具有速度較快、儲存為二進位檔案方便傳輸的優點。然而,它的缺點是資料恢復的粒度較大,是全量恢復,不支援增量恢復。
AOF(Append Only File) 透過記錄Redis執行的每個寫入命令到AOF文件,當需要恢復資料時,直接匯入AOF文件以執行其中的記錄。 AOF檔案是一個追加模式的日誌文件,每個Redis指令都將以AOF格式寫入AOF檔。與RDB不同,AOF持久化是以實時的方式記錄伺服器所處理的每一個寫、刪除操作(查詢操作不會記錄),以文本的方式存儲,因此可以直接打開文件查看詳細的操作記錄。但AOF的缺點是隨著Redis的運行,AOF的日誌會越來越長,如果實例宕機重啟,重播整個AOF將會變得非常耗時。因此,AOF具有重寫機制,用來優化記錄,減少不必要的記錄,提高恢復效率。
RDB和AOF的優劣勢 RDB資料更容易遺失; AOF恢復的時間更長。
總結:如果更關注資料恢復的速度和效率,可以選擇RDB; 如果更關注資料的完整性和即時性,可以選擇AOF。 同時,也可以結合使用RDB和AOF,以達到更好的效果。
透過Redis RDB提權(未授權登入)
SSH
客戶端登入伺服器 客戶端的公鑰給伺服器; 客戶端透過私鑰加密資訊; 伺服器透過客戶端給的公鑰進行解密,如果能解密成功,就無需密碼登入。
過程 1. 客戶端產生密鑰對; 2. 伺服器支援ssh; 3. redis支持rdb; 4. redis可以被爆破; 5. 修改rdb的儲存目錄; 7. 透過redis寫入客戶端的公鑰; 8. 保存;
索引
MYSQL一筆記錄長什麼樣子 組、頁
組:4~8筆記錄構成一組
頁:頁裡面的每一個組別的記錄數量不唯一, 有的組別中只有一條,有的有4條6條等
叢集索引(推薦) 主鍵是唯一的 葉子節點存放的是完整的數據
二級索引(不建議) 2級索引葉節點存放的不是完整的數據,只有主鍵 1. 次數多; 2. 快取局部性差
聯合索引 和二級索引一樣的
連接
內連 select u.username, g.* from user u INNER JOIN goods g on u.userid = g.userid
左連接 select u.userid, u.username, g.* from user u LEFT JOIN goods g on u.userid = g.userid
MYSQL-DML(Data Manipulation Language)操作
添加 語法:insert into 表示(字段1, 字段2, 字段3) values(值1, 值2, 值3)
刪除 delete from 表名 where 欄位名=值
修改 語法:update 表示 set 欄位名稱=’新的值’ where 欄位名稱=’舊的值’
查詢(重難點) 語法:select {*|<欄位名,3階段sql注入會用到>} from 表名 [where <條件式>]where 子句用來過濾結果集中的記錄。它後面跟著一個或多個條件表達式,只有滿足這些條件的記錄才會被選取。 [group by] group by子句用來將結果集依照一個或多個欄位分組。 [order by 欄位 desc | asc] order by 子句用來對結果集中的記錄進行排序 desc是從大到小,asc是從小到大