天天看点

亿级流量多级缓存高并发系统架构实战

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

继续阅读