使用golang对于单机版商城秒杀的一些看法

320 阅读1分钟

在刷校招面试题的时候看到三太子的秒杀系统设计,所以就想自己写一个单机版的玩玩

然后突然发现貌似不用redis也是可以滴🤔

本人菜🐔,要是存在什么问题欢迎提出

代码如下

func Shop(num int) (func() bool, chan chan bool) {
	c := make(chan chan bool)
	go myredis(num, c)
	return func() bool {
		ok := make(chan bool)
		defer close(ok)
		c <- ok
		return <-ok
	}, c
}

func myredis(num int, c chan chan bool) {
	for n := range c {
		if num > 0 {
			num--
			n <- true
		} else {

			n <- false
		}
	}
}

测试了一下貌似10w没问题

func main() {
	shop, c := myRedis.Shop(100000)
	for i := 0; i < 1000000; i++ {
		go shop()
	}
	time.Sleep(time.Second)
	close(c)
}