进入 c:/xampp/apache/bin
基本用法:
ab -n 全部请求数 -c 并发数测试url
可以将ab.exe 加入系统环境变量;或直接切换置 ab 目录执行。如: C:WindowsSystem32> cd C:xamppapachebin
关于秒杀很好理解,就是每一个用户抢到商品之后,库存进行递减操作
#定义秒杀接口 def miaosha(request): res_one = News.objects.get(pk=1) if res_one.pd > 0: time.sleep(5) with connection.cursor() as c: c.execute(' update news set pd = pd - 1 where id = 1 ') return HttpResponse('ok') else: return HttpResponse('没有了')
索然逻辑上很严谨,代码也很简单,但是在高并发没有锁的情况下,数据库会过载导致超卖现象,也就是库存变为负数
于是就得引入redis来解决这一个问题:
r = redis.Redis(host='localhost', port=6379) #定义过载限制 def limit_handler(): """ return True: 允许; False: 拒绝 """ amount_limit = 3 # 限制数量 keyname = 'limit' # redis key name incr_amount = 1 # 每次增加数量 # 判断key是否存在 if not r.exists(keyname): # 为了方便测试,这里设置默认初始值为95 # setnx可以防止并发时多次设置key r.setnx(keyname, 0) # 数据插入后再判断是否大于限制数 if r.incrby(keyname, incr_amount) <= amount_limit: return True return False #定义秒杀接口 def miaosha(request): res_one = News.objects.get(pk=1) if limit_handler(): #if res_one.pd > 0: time.sleep(5) with connection.cursor() as c: c.execute(' update news set pd = pd - 1 where id = 1 ') return HttpResponse('ok') else: return HttpResponse('没有了')
这样只要配合这个方法,在进行修改mysql数据库的操作,就可以防止超限