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