秒发4000万数据的缓存方案以及消息优先消费
诱发问题:MQ是否设置了消息消费顺序? 我发现在mq并发进入消费时并不能保证消息的消费顺序,此时如果同时一万线程对 一个 生产者 一个 消费者的 一个 队列业务互斥进行消费,此时的消费顺序是无序的,同一时刻会造成互斥数据同时存在多份,且发生率高达10%,而目前能想到的解决方案是,redis的消息是存取很快,且有顺序的,所以把mq消费的方法加了分布式锁,但是这效率能不能再次保证呢?不能的,因为你mq存在的意义就是异步消费,如果不是互斥线程,那锁起来反而影响了性能,此时,就要看此时的数据显示重不重要?如果数据重要就锁,如果不重要,最终数据一致就可以了。 那么当每秒4000万数据进行消费,且此时需要对数据进行过滤时如何设计? L1缓存:Springcache+j2cache L2缓存:redis 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数, 读取顺序 -> L1 -> L2 -> DB J2Cache 默认使用 Caffeine 作为一级缓存,使用 Redis 作为二级缓存 但是由于此类数据中是存在部分黑名单数据的,此时需要将数据过滤后才能缓存然后消费。 过滤大key数据 放入缓存key分片 队列+mq根据消息优先级去消费 二级缓存 过滤大key数据 由于瞬时数据将达到4000万,一开始的想法是能不能用bitmap去存放数据