mysql產(chǎn)生隨機(jī)唯一數(shù)函數(shù) PHP mysql redis一次性生成大量隨機(jī)數(shù),怎么保證重復(fù)率低、快速存儲?
PHP mysql redis一次性生成大量隨機(jī)數(shù),怎么保證重復(fù)率低、快速存儲?讓我們假設(shè)你想取0到1億之間的隨機(jī)數(shù):,不做重復(fù)數(shù)據(jù)消除操作的重復(fù)率可以通過數(shù)學(xué)建模來分析。如果可以接受的話,可以直接用
PHP mysql redis一次性生成大量隨機(jī)數(shù),怎么保證重復(fù)率低、快速存儲?
讓我們
假設(shè)你想取0到1億之間的隨機(jī)數(shù):
,不做重復(fù)數(shù)據(jù)消除操作的重復(fù)率可以通過數(shù)學(xué)建模來分析。如果可以接受的話,可以直接用PHP內(nèi)置的隨機(jī)函數(shù)來生成;
,可以適當(dāng)使用redis作為緩存,在機(jī)器上做重新處理;
,即使redis速度快,體積大,也要考慮內(nèi)存的大小,除了計算時間和空間的復(fù)雜度外,我們可以適當(dāng)使用“偽隨機(jī)”策略,如碎片化處理。假設(shè)我們?nèi)?000萬個隨機(jī)數(shù),首先從0到1000萬個分區(qū)取100萬個隨機(jī)數(shù),然后使用redis進(jìn)行部分緩存去重處理。處理完成后,清除redis緩存并移動到下一個碎片處理,依此類推,直到檢索完成。
例如,您可以將三千或五千個隨機(jī)數(shù)分成一個批,然后重新查找它們并將它們插入mysql。
如何利用SQL隨機(jī)查詢出指定數(shù)量的數(shù)據(jù)?
雖然它們都使用SQL,但不同的數(shù)據(jù)庫有不同的寫入方法來完成此操作。以50個項目為例。
select*from[table name]where[condition]order by Rand()limit 50
select top 50*from[table name]group by[ID]order by newid()