一、引言
學習Redis也有一段時間了,感觸還是頗多的,但是自己很清楚,路還很長,還要繼續。上一篇文章簡要的介紹了如何在Linux環境下安裝Lua,并介紹了在Linux環境下如何編寫Lua腳本和運作。由于我們這個系列是以Redis為主,是以也介紹了Redis和Lua如何進行整合、運作。
在Lua腳本中有一個很重要的資料類型,那就是table類型,大家可以把Lua的table類型暫時了解為數組,隻是Lua的table類型的下标可以是數字,可以是字元,除了(nil)類型,其他類型都可以做為table類型的下标。我們在使用Redis和Lua的過程中,比較多的會用到這個table類型,今天的主要任務就是介紹table類型的使用、CJSON的解析和如何通過C#語言來對Redis和Lua的進行整合操作。後續我還會推出針對Lua腳本文法的文章來擴充這個系列。
二、Lua簡介
Lua 是一個小巧的腳本語言。其設計目的是為了嵌入應用程式中,進而為應用程式提供靈活的擴充和定制功能。Lua由标準C編寫而成,幾乎在所有作業系統和平台上都可以編譯,運作。Lua并沒有提供強大的庫,這是由它的定位決定的。是以Lua不适合作為開發獨立應用程式的語言。
在Redis中使用Lua有很多好處,它可以減少網絡開銷,把多個操作一次性打包執行。Lua腳本天生支援原子性的操作,避免開啟第三方事務,提高了性能。代碼重用也是一個重要的好處,寫好的代碼會被加載到Redis記憶體中,可以供其他用戶端使用,減少重複勞動。Lua腳本使用C語言寫成的,執行速度很快,并天然具有可移植性,也是代碼重用的很好展現。一個完整的Lua解釋器,不過200k,在目前所有腳本引擎中,Lua的速度是最快的。這一切都決定了Lua是作為嵌入式腳本的最佳選擇。
三、基本操作
1、在Linux環境下安裝CJSON和簡單使用
cjson是一個類型轉換工具類,可以把一個字元串轉換為Lua的類型,如果類型嵌套多層,還可以轉換為Lua的table類型,是以這個工具很重要,在編寫Lua腳本的過程中經常使用,是以我們先來介紹cjson這個工具類的安裝和使用。
1.1、下載下傳CJSON軟體包,官網位址:https://www.kyne.com.au/~mark/software/lua-cjson.php。

1.2、解壓到目前目錄,當然也可以解壓到其他目錄,解壓到其他目錄,比如:/usr/local,指令如下:tar zxvf lua-cjson-2.1.0.tar.gz -C(大寫的) /usr/local
解壓成功後的目錄結構:
1.3、進入到解壓目錄的根目錄,準備修改Makefile檔案,用vim打開的修改檔案的時候,注意名稱大小寫拼寫正确。
1,4、vim 進入Makefile檔案,修改PREFIX選項,修改完畢,按ESC按鈕,再按:,最後按wq,儲存退出。
1.5、使用make指令在解壓檔案的根目錄下進行編譯。
1.6、最後使用 make install 安裝cjson軟體包。
1.7、cjson.so檔案很重要,是核心運作檔案,如果出現錯誤,在某某目錄沒有找到cjson這個檔案,就在其他目錄找到,并拷貝到目标目錄,可以解決所出現的錯誤。
錯誤如圖:
隻需要把cjson.so檔案拷貝到【/usr/local/lib/lua/5.3(這個版本具體情況要看具體情況)/】目錄下就可以了
1.8、安裝完成,開始測試cjson安裝是否成功,此步驟有兩步,必須全部都完成。
2、在Linux環境下,在Lua腳本裡面使用cjson來解析類型。
執行效果如圖:
3、在Windows環境下,用C#執行lua腳本
3.1、在VS2015中建一個C#控制台應用程式,并添加LuaInterface.dll的引用
LuaInterface.Lua類是CLR通路Lua解釋器的主要接口,一個LuaInterface.Lua類對象就代表了一個Lua解釋器(或Lua執行環境),Lua解釋器可以同時存在多個,并且它們之間是完全互相獨立的。
3.2、在Windows環境下,Lua腳本檔案使用上面提到的源檔案 cjsonDemo.lua。
檔案所在位址如下:C:\Users\Administrator\Desktop\Redis\LuaScript\cjsonDemo.lua
3.3、測試代碼如下:
3.4、有可能抛出的異常:FileLoadException,異常内容:其他資訊: 混合模式程式集是針對“v2.0.50727”版的運作時生成的,在沒有配置其他資訊的情況下,無法在 4.0 運作時中加載該程式集。
該問題解決不是很難,隻要在配置檔案裡增加一點配置就能解決。配置代碼如下:
在原來.NET2.0,.NET3.5的時候,由于程式運作環境本質還是.NET2.0,而到了.NET4.0由于整個程式集的版本更新,以前使用.NET2.0所編寫的程式集與.NET4.0的程式集繼續互操作的時候就會出現上面所說的相容性問題。通過MSDN,我們可以知道,startup配置節中的useLegacyV2RuntimeActivationPolicy屬性是在.NET4.0中新增的,預設是false,表示:使用預設的 .NET Framework 4 激活政策,該激活政策将加載 .NET Framework 4 通過使用公共語言運作時 (CLR) 版本 4 所建立的程式集,以及 CLR 早期版本通過使用受支援的低于版本 4 的最高 CLR 版本所建立的程式集。
現在如果當程式在.NET4.0環境下要使用.NET2.0及.NET3.5的程式時就必須将useLegacyV2RuntimeActivationPolicy設定為true,同時還要注意,需要在startup配置節的位元組中添加supportedRuntime配置節,并指定為“v4.0”,表示使用.NET4.0運作時來運作程式。
四、結束
今天就寫到這裡了,就給今天做一個總結吧。今天主要完成了lua-cjson在Linux下的安裝和使用,當然也有出現問題的解決。同時也測試了在Linux環境下,在Lua腳本中使用cjson工具類完成table類型的解析。最後也測試了一下如何使用C#來調用lua腳本,并執行。但是有一個事情,還沒做,就是在Windows環境下,如何在Lua腳本裡使用lua-cjson來解析類型,裡面涉及到的内容很多,一篇文章無法寫完,隻好把相關的東西放到下一片文章吧。