秒杀 假如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