原创 Golang-defer關鍵字 defer關鍵字

defer關鍵字 defer是Golang中一個非常重要的關鍵字,主要是用於註冊延遲調用,這些調用在return時纔會執行,通常用來銷燬資源 示例 簡單場景 最簡單的使用場景 import "fmt" type handler s

原创 錯誤處理的幾種套路 錯誤處理的幾種套路

錯誤處理的幾種套路 在Go語言中並不支持拋出異常的方式提示錯誤,而是通過支持多返回值的方式返回error接口、並且支持panic的方式在遇到致命錯誤時推出程序 致命錯誤 panic func F() { panic("pani

原创 比較運算 比較運算

比較運算 基礎類型比較 package main import "fmt" func main() { var a = 1 var b = 1 if &a == &b { fmt.Printl

原创 Docker部署單節點etcd Docker部署單節點etcd

Docker部署單節點etcd docker-compose.yml version: "3.5" services: etcd: hostname: etcd image: bitnami/etcd:3 dep

原创 Join從句 SQL-Join從句

SQL-Join從句 Join從句是SQL中用來處理兩張表中關聯數據的語句 使用以下兩張表table_a和table_b作爲栗子進行說明 mysql> select * from table_a; +----------+-------

原创 Redis深度歷險-快速列表 Redis深度歷險-快速列表

Redis深度歷險-快速列表 快速列表就是爲了實現list的功能,是基於壓縮列表和雙向鏈表的集合實現,主要是規避普通雙向鏈表的前後指針分配和內存碎片問題 列表 void listTypePush(robj *subject, robj

原创 Redis深度歷險-基數樹 Redis深度歷險-基數樹

Redis深度歷險-基數樹 Redis中的基數樹是一種有序字典樹,zset也是一種有序字典但是是按照score進行排序的,rax是按照key進行排序的;平衡二叉樹、跳錶都可以用來實現這種有序集合,不過要考慮複雜度 數據結構 數據結構

原创 Redis深度歷險-緊湊列表

緊湊列表 在Redis5.0又引入了新的數據結構listpack,是在壓縮列表基礎上的改進,整體有所類似,緊湊列表解決了一個很重要的問題:級聯更新;Redis深度歷險-壓縮列表 - 簡書 (jianshu.com) 級聯更新 在緊湊列

原创 Redis深度歷險-壓縮列表 Redis深度歷險-壓縮列表

Redis深度歷險-壓縮列表 在zset和hash在元素個數較少時會採用壓縮列表來存儲以節省空間,主要代碼在ziplist.c和ziplist.h中;這是非常重要的數據結構,在zset、hash、list的底層數據結構之一 設計思想

原创 索引算法 索引算法介紹

索引算法介紹 線性查找 線性查找就是最簡單的查找算法,在一個數組或者鏈表從頭到尾遍歷查找,時間複雜度是o(n) 二分查找 二分法相比於線性查找時間複雜度降低到了o(logn)級別,但是添加了一些限制 必須是數組,支持隨機訪問 數組中元素

原创 Redis深度歷險-跳錶 Redis深度歷險-跳錶

Redis深度歷險-跳錶 跳錶是一個比較經典的數據結構,非常有用但又不像紅黑樹那麼複雜,非常值得學習;在Ridis中除了提供set這種無序集合,還提供了zset這種有序集合,有序集合就是使用跳錶實現的 跳錶的意義 跳錶是一種結合了二分

原创 Redis深度歷險-整數集合(intset) Redis深度歷險-整數集合(intset)

Redis深度歷險-整數集合(intset) Redis中的集合在只有數字的情況下使用的是intset存儲 結構體定義 typedef struct intset { uint32_t encoding;

原创 Redis深度歷險-集合 Redis深度歷險-集合

Redis深度歷險-集合 Redis中的set是一種無序集合,如果存儲的全部都是數字則內部使用的是intset存儲,否則使用的是hashtab存儲 字符串集合 int setTypeAdd(robj *subject, sds valu

原创 Redis深度歷險-字典迭代器 Redis深度歷險-字典迭代器

Redis深度歷險-字典迭代器 在Redis中比較重要的一部分就是迭代器,因爲Redis是單線程運行的,必須爲外部提供O(1)級別的接口;包括集合以及哈希表都是以字典來實現的,如hscan接口;代碼在src/dict.c和hiredis/

原创 Redis深度歷險-IO模型 Redis深度歷險-IO模型

Redis深度歷險-IO模型 Redis是單進程單線程實現的服務器,網絡併發還是值得學習一下的,本文在Redis6.2.5的代碼上進行分析,這部分的代碼主要放在ae開頭的源碼文件當中 主線程 跨平臺宏定義 //ae.c #ifdef H