redis库存和redis预库存保持一致
redis库存是指初始化是从数据库中获取最新的秒杀商品列表数据存到redis中
redis的预库存是指每个秒杀商品每次成功秒杀之后,该商品的剩余库存数量是多少,这个数量和数据是一致的。
问题的产生
数据库的库存数量和初始化缓存在redis中的秒杀商品列表里面的库存数量不一致,因为目前缓存在redis中的秒杀商品列表的数据只有在手动初始化的时候才会改变。
需求:
商品列表的预库存和数据库的库存要一致
代码:
单个秒杀商品
从redis的该秒杀商品的预库存中获取库存数量(key是seckill_stock_count),这个库存数量是数据一致的,把这个数据拿出来,设置到Redis中的秒杀商品列表中的库存数量(key 是 seckill_hash )
所有秒杀商品的列表
测试:
优化后的压测效果
之前的测试数据
1、线程数500 * 循环次数10 总计 5000 次访问
Error 错误率是 0
吞吐量在3500–4200左右
包括目前电脑启动了秒杀项目等多个软件
2、线程数5000 * 循环次数10 总计 50000 次访问
错误率高达40% – 99% 不等
每秒访问的次数是 1700 – 2300 不等,跟上面的5000次访问差很多
优化后的测试数据
1、线程数500 * 循环次数10 总计 5000 次访问
Error 错误率是 0
优化之前:吞吐量在3500–4200左右
优化之后:吞吐量在 4700左右
2、线程数5000 * 循环次数10 总计 50000 次访问
优化之前:
错误率高达40% – 99% 不等
每秒访问的次数是 1700 – 2300 不等,跟上面的5000次访问差很多
优化之后:
错误率为0,
吞吐量为:5400左右
但是测试多次之后,可能redis顶不住,也是有错误率
如果redis顶得住5万的并发,那么就没有错误率,且吞吐量达到5000多每秒