Code -> GigHub
https://github.com/liufengji/redis_seckill.git
1胧谈、概念
http://www.lua.org/download.html
Lua是一個(gè)小巧的腳本語(yǔ)言,用標(biāo)準(zhǔn)C語(yǔ)言編寫并以源代碼形式開放糠聪,因此Lua腳本可以很容易的被C/C++ 代碼調(diào)用,也可以反過(guò)來(lái)調(diào)用C/C++的函數(shù),其設(shè)計(jì)目的是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能饶套,Lua并沒(méi)有提供強(qiáng)大的庫(kù),一個(gè)完整的Lua解釋器不過(guò)200k垒探,所以Lua不適合作為開發(fā)獨(dú)立應(yīng)用程序的語(yǔ)言,而是作為嵌入式腳本語(yǔ)言怠李。
Lua 是巴西里約熱內(nèi)盧天主教大學(xué)(Pontifical Catholic University of Rio de Janeiro)里的一個(gè)研究小組于 1993 年開發(fā)的圾叼,該小組成員有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo捺癞。
很多應(yīng)用程序夷蚊、游戲使用LUA作為自己的嵌入式腳本語(yǔ)言,以此來(lái)實(shí)現(xiàn)可配置性髓介、可擴(kuò)展性惕鼓。這其中包括魔獸爭(zhēng)霸地圖、魔獸世界唐础、博德之門箱歧、憤怒的小鳥等眾多游戲插件或外掛。
2一膨、LUA腳本在Redis中的優(yōu)勢(shì)
seckill.lua
(1)將復(fù)雜的或者多步的redis操作呀邢,寫為一個(gè)腳本,一次提交給redis執(zhí)行豹绪,減少反復(fù)連接redis的次數(shù)价淌。提升性能。
(2)LUA腳本是類似redis事務(wù),有一定的原子性蝉衣,不會(huì)被其他命令插隊(duì)括尸,可以完成一些redis事務(wù)性的操作。
但是注意redis的lua腳本功能病毡,只有在2.6以上的版本才可以使用濒翻。
(3)利用lua腳本淘汰用戶,解決超賣問(wèn)題剪验。
(4)redis 2.6版本以后肴焊,通過(guò)lua腳本解決爭(zhēng)搶問(wèn)題,實(shí)際上是redis 利用其單線程的特性功戚,用任務(wù)隊(duì)列的方式解決多任務(wù)并發(fā)問(wèn)題娶眷。
3、利用lua腳本淘汰用戶啸臀,解決超賣問(wèn)題届宠。
redis 2.6版本以后,通過(guò)lua腳本解決爭(zhēng)搶問(wèn)題乘粒,實(shí)際上是redis 利用其單線程的特性豌注,用任務(wù)隊(duì)列的方式解決多任務(wù)并發(fā)問(wèn)題
Nginx 支持 Lua ,Redis支持Lua灯萍,面對(duì)高并發(fā)可以選擇Nginx+Lua+redis轧铁,替代掉Tomcat+mysql
電商 最熱訪問(wèn)頁(yè)面,很多都是使用Nginx+Lua+redis