看你要的隨機數有多大然后能接受多大的重復率吧
假設你要0到1億之間取隨機數:
取1千個隨機數,不做去重操作的重復率是多少大概可以通過數學建模分析出來,能接受的話大可直接用php內置的隨機函數去生成就好;
取10萬個隨機數,可以適當用redis做緩存,做下隨機做下去重處理;
取百萬千萬級的隨機數,即使redis再快再大也不得不考慮下內存的大小了,還有時間空間的復雜度的計算了,可以適當用點“偽隨機”策略了,如分片處理,假設取1千萬個隨機數,先從0到1千萬的分片中取1百萬個隨機數,用redis做部分緩存去重處理,處理完成后,清理redis的緩存轉入下一個分片處理,以此類推直到取完。
以上就是大概策略,另外一個快速存取的要求就是盡可能批量處理,比如無論如何先生成三五千個隨機數作為一批,然后去重(redis),然后插入MySQL中這樣。