原创 Redis 數據庫(2) redis鍵過期策略

Redis有4個命令可以設置鍵的過期時間: 1. expire <key> <ttl> 設置key的生存時間爲ttl秒; 2. pexpire <key> <ttk> 設置key的生存時間爲ttl毫秒;  3. expireat <key

原创 Redis 鏈表的數據結構

鏈表節點的數據結構: typeof struct listNode { //前置節點 struct listNode *prev; //後置節點 struct listNode *next; //節點的值 void *value; } l

原创 Redis 哈希對象

哈希對象編碼可以是ziplist或者hashtable。 ziplist編碼的哈希對象使用壓縮列表作爲底層實現。有新的鍵值對要保存時,程序會先將鍵值對的鍵推到列表表尾,再將鍵值對的值推到列表表尾。 hashtable編碼的哈希對象使用

原创 Redis 服務器 單機數據庫的實現

Redis命令請求的執行過程: 1.發送命令請求 客戶端將命令請求轉換成協議格式,通過連接到服務器的套接字發送給服務器。 2.讀取命令請求 1)讀取套接字協議格式的請求,保存到客戶端狀態的緩衝輸入區。 2)分析緩衝區命令,提取命令參

原创 Redis 跳躍表的實現

Redis使用跳躍表作爲有序集合鍵的底層實現之一,如果一個有序集合包含的元素數量較多,或者有序集合中成員是較長的字符串時,Redis就會使用跳躍表來作爲有序集合鍵的底層實現。 和鏈表、字典等數據結構在Redis內部的廣泛應用不同,Redi

原创 Redis 客戶端

通過使用由I/O多路複用技術實現的文件事件處理器,Redis服務器使用單線程單進程的方式來處理命令請求,並與多個客戶端進行網絡通信。 redisClient結構保存客戶端的數據結構: 套接字描述符名字標誌位正在使用的數據庫指針,數據庫

原创 Redis 類型檢查和命令多態

Redis中用於操作鍵的命令基本可以分爲2類。 其中一種是可以對任何類型的鍵執行,比如DEL,EXPIRE,RENAME,TYPE,OBJECT,TTL等命令。 另一種只能對特定的鍵執行,比如: SET,GET,APPEND,STRL

原创 Redis 字典的實現(1)

字典就是我們熟悉的map,鍵值對(key-value pair)的抽象數據結構。Redis數據庫就是使用字典來作爲底層實現的。 先介紹下數據結構: 1.哈希表 typeof struct dictht { //哈希表數組 dictEntr

原创 MySQL導入Emoji表情符號報錯

Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized

原创 Redis 事件(2) -- 時間事件

Redis時間事件分爲以下兩類:  1.定時事件:程序在指定時間執行一次。  2.週期性事件:程序每隔指定時間執行一次。  時間事件的屬性: 1.id:服務器爲時間事件創建的全局唯一ID,ID號從小到大遞增。 2.when:毫秒精度的

原创 MySQL函數功能

MySQL默認函數功能是關閉的。 1.查看狀態 mysql> show variables like '%func%'; +---------------------------------+-------+ | Variable_na

原创 Redis AOF持久化

Redis提供了AOF(Append Only File)持久化功能,AOF通過保存服務器所執行命令來記錄數據庫狀態的,和MySQL記錄增刪改的log有點像哈。 AOF持久化功能實現分爲命令追加(append)、文件寫入(write)和

原创 Redis 字典的實現(2)

1.Redis 字典 Hash算法 根據key計算hash值 hash = dict -> type -> hashFunction(key); 根據sizemask屬性和哈希值,計算出索引,ht[x]可以是ht[0]或ht[1] ind

原创 Linux下Mysql忘記密碼

確認只有你能登錄這臺機器,因爲過程中Mysql出於無密碼登錄狀態,任何有這臺機器權限的人都可能進來搞破壞,最好的做法就是拔掉網線。 1.編輯my.cnf文件,在mysqld下面加上一行“skip-grant-tables‘,加完之後是這樣