原创 Redis-壓縮表-ziplistIndex詳解

/* 返回壓縮表zl的第index個結點, index爲非負:從表頭開始查找,0表示返回第一個結點 index爲負:從表尾開始查找,-1表示返回最後一個結點 */ unsigned char *ziplistIndex(unsigned

原创 Redis-壓縮表-ziplistNext詳解

/* 返回p指向結點的後置結點 如果p指向ZIP_END,返回NULL; 如果p是表尾結點,返回NULLL */ unsigned char *ziplistNext(unsigned char *zl, unsigned char *

原创 Redis-壓縮表-ziplistPrev詳解

/* 返回p指向的結點的前置結點 如果p指向的壓縮表是空表,返回NULL, 如果p指向壓縮表的表頭結點,返回NULL */ unsigned char *ziplistPrev(unsigned char *zl, unsigned c

原创 Redis-壓縮表-ziplistDelete詳解

/* 刪除壓縮表zl中p指向的結點,返回刪除結點之後的壓縮表 刪除之後p指向p的下一個結點,這樣方便對鏈表結點進行迭代刪除 */ unsigned char *ziplistDelete(unsigned char *zl, unsig

原创 Redis-壓縮表-ziplistGet詳解

/* 取出p指向的結點的值 如果結點保存的是字符串,sstr保存字符串指針,slen保存字符串長度; 如果結點保存的是整數,*sval保存整數值 結點的值獲得成功返回1,獲得失敗返回0 如果p爲空,返回0 如果p指向列表末端,返回, 其

原创 Redis-壓縮表-__ziplistInsert詳解

/* 將長度爲slen的字符串s插入到壓縮表zl的位置p處 */ static unsigned char *__zipListInsert(unsigned char *zl, unsigned char *p, unsign

原创 Redis-壓縮表-ziplistPush詳解

/* 將長度爲slen的字符串s,頭插或者尾插入壓縮表zl中,where指示是頭插還是尾插 */ unsigned char *ziplistPush(unsigned char *zl, unsigned char *s, unsig

原创 lua數組和鏈表

--[[ 矩陣和多維數組 稀疏矩陣:矩陣的大部分元素都爲空或者0 ]] -- 創建5*6的二維數組 mt = {} for i = 1, 5 do mt[i] = {} for j = 1, 6 do mt[i][j] = 0

原创 dofile、loadfile、loadstring

目錄 1.用法 2.區別 3.示例 1.用法     dofile("filename")     loadfile("filename")     loadstring("lua statements") 2.區別     dofile

原创 初識協程

--[[ 協程(協同程序): 有自己的堆棧,自己的局部變量,自己的指令指針,與其他協程共享全局變量。 在多處理器的情況下,可以同時運行多個線程,但在指定的某一時刻只有一個協程在運行, 並且這個正在運行的協程在指定的時候掛起。 調用re

原创 協同進程+過濾器實現生產者消費者

代碼及註釋如下,使用print函數打印值和行號,可以看到代碼的運行路徑 --[[ resume協程,如果協程執行的過程中調用yield函數,則resume函數返回yield的參數 ]] function receive(prod)

原创 pcall和xpcall

pcall --[[ pcall 返回的錯誤信息可以是代碼執行的具體錯誤原因 或者是error函數返回的錯誤信息 pcall返回的錯誤信息原則是儘可能詳細的描述錯誤原因 ]] function foo() a = 'a' + 1 e

原创 lua數組

--[[ 數組 1. 數組大小不固定,可以動態增長,但可以獲得當前數組的元素個數 2. 數組下標可以從任意值開始,若要使用標準庫函數,數組下標必須從1開始, 默認數組下標從1開始 ]] s = {1, 2, 3} print(table

原创 Redis-壓縮表-ziplistCompare詳解

/* 將p指向的結點的值和長度爲slen的sstr比較, 相等:返回1, 不等:返回0 */ unsigned char ziplistCompare(unsigned char *p, unsigned char *sstr, uns