秒殺 假如100w 100商品
前台:
做登入、實名認證、會員等認證、
點選确定按鈕做分流送出
背景:
假如90w資料到背景
第一個nginx(叢集)做負載,直接削峰30w
第二層nginx做反向代理 削峰到幾百
使用redis直接 原子操作 如果是預銷售,那麼就存到kafka等待客戶支付的時候在真正去資料庫減操作
為什麼lua能承受高并發
因為nginx能承受高并發,是以lua能承受
lua的基礎練習
nginx不适合做叢集,适合做高可用
dns
一個域名可以配置多個ip,通過客戶通路dns,dns通過一定政策跳轉到對應的ip,做到第一層分流
lua整合redis
登入redis
redis操作eval
local key=keys[1]
local list=redis.call("get",key);
return list;
[root@ke01 lua]# redis-cli -h ke01 -p 6379 -a 123456 --eval test02.lua a ? 2>/dev//null
"xiaoke"
讀取redis集合中的資料:
local list=redis.call("lrange",key,0,-1);
[root@ke01 lua]# redis-cli -h ke01 -p 6379 -a 123456 --eval test01.lua age ? 2>/dev//null
1) "18"
2) "16"
3) "20"
4) "52"
[root@ke01 lua]# redis-cli -h ke01 -p 6379 -a 123456 --eval test01.lua name ? 2>/dev//null
1) "xiaoke"
2) "xiaowang"
統計點選次數
local msg='count:'
local count = redis.call("get","count")
if not count then
redis.call("set","count",1)
end
redis.call("incr","count")
return msg..count+1
[root@ke01 lua]# redis-cli -h ke01 -p 6379 -a 123456 --eval test03.lua a ? 2>/dev//null
"count:1"
"count:2"
生産環境下部署:
[root@ke01 lua]# redis-cli -a 123456 script load "$(cat test02.lua)"
"43dd2a515754c08fb75f031c56e86986b8659b60"
[root@ke01 lua]# redis-cli -a 123456 evalsha "43dd2a515754c08fb75f031c56e86986b8659b60" 1 a
搭建nginx+lua開發環境(openresty)
測試lua腳本
建立配置檔案lua.conf
擷取nginx uri中的所有變量
openresty關聯redis