不使用redis ,如何实现万级并发的秒杀活动呢?面试话题紫薯布丁
你以为的秒杀是看点击先后顺序排列取前n个
但是实际上大可不必,甚至从商业的角度来说,应该保证每个地区都能“雨露均沾”(类似高考分省录取)才是更好的
所以,你的思路就可以打开了吧
那就自己使用一个redis,redis另一个好处是可以横向扩展节点,只是一个节点本地内存就行了
其实就是锁的概念, 防止并发超卖,你不用redis去实现那就用别的锁或者方案,redis分布式锁是目前使用最广泛的,方案也是最完善的。
不知道你这个问题是否已经解决, 如果还没有解决的话:一般来说,一旦被淘汰的数据选定后,如果这个数据是干净的,那么我们就直接删除;如果这个数据是脏数据,我们需要把它写回数据库。
干净数据和脏数据的区别就在于,和最初从后端数据库里读取时的值相比,有没有被修改过。
干净数据一直没有被修改,所以后端数据库里的数据也是最新值。在替换时,它可以被直接删除。而脏数据则相反。
但是,对于 Redis 来说,它决定了被淘汰的数据后,会把它们直接删除。即使淘汰的数据是脏数据,Redis 也不会把它们写回数据库。
所以,我们在使用 Redis 缓存时,如果数据被修改了,需要在数据修改时就将它写回数据库。
否则,这个脏数据被淘汰时,会被 Redis 删除,而数据库里也没有最新的数据了。
分析完 LRU
我们继续分析 LFU
算法。在这之前先了解一个问题:缓存污染。
万级并发的秒杀,那服务器的集群是肯定要配置的,配置集群后,我们可以依据ip进行分发,不同地区的ip进入不同的集群服务器,然后对服务器进行本地缓存,同时做个队列,保证进入到当前服务器的请求都是按照先进先出的规则来的,如果还不行,那就地区继续细化,多几台集群服务而已