第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

生成同時(shí)訪問(wèn)的唯一編號(hào)

生成同時(shí)訪問(wèn)的唯一編號(hào)

PHP
一只斗牛犬 2023-10-01 15:56:44
情況:人們會(huì)在我的系統(tǒng)上訂購(gòu)門(mén)票,我想生成門(mén)票號(hào)碼。該應(yīng)用程序并不是那么大,而且已經(jīng)可以運(yùn)行了。后端完全用 vanilla php 編寫(xiě)。但我一次只對(duì)一名用戶進(jìn)行測(cè)試?,F(xiàn)在我猜想多個(gè)用戶有可能同時(shí)訪問(wèn)票證訂單,因?yàn)楣緝?nèi)訂購(gòu)的時(shí)間窗口很短。數(shù)據(jù)庫(kù) (MongoDB) 將每個(gè)事件保存為文檔。每個(gè)文檔都有一個(gè)字段,用于保存第一個(gè)免費(fèi)票號(hào)。付款過(guò)程結(jié)束后,php 腳本檢查用戶購(gòu)買(mǎi)了多少?gòu)埰?,然后開(kāi)始生成票號(hào)(獲取當(dāng)前值 -> 增加 -> 將其保存到數(shù)據(jù)庫(kù) -> 等)?,F(xiàn)在,當(dāng)兩個(gè)人同時(shí)執(zhí)行此操作時(shí),可能會(huì)發(fā)生這樣的事情:兩個(gè)人都將獲得 2314 作為當(dāng)前可用數(shù)字,并且隨后都會(huì)增加該數(shù)字?,F(xiàn)在有兩張票號(hào)相同的票。我考慮更改為 sql 并獲取插入行的 id,因?yàn)檫@已經(jīng)是一個(gè)唯一的數(shù)字。我也想過(guò)取當(dāng)前時(shí)間+鹽并對(duì)其進(jìn)行哈希處理(但這樣就會(huì)出現(xiàn)殘酷的票號(hào))。但我想知道是否有可能在不使用 sql 之類(lèi)的 db 函數(shù)的情況下實(shí)現(xiàn)這一目標(biāo)。我想這在其他場(chǎng)景中也很有用,在這些場(chǎng)景中我可能無(wú)法使用諸如 sql 之類(lèi)的東西。我想過(guò)“阻止對(duì)數(shù)字/函數(shù)的訪問(wèn)”之類(lèi)的事情,直到第一個(gè)調(diào)用函數(shù)再次釋放它。
查看完整描述

2 回答

?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以使用hrtime()

<?php

// hrtime

echo hrtime(true).PHP_EOL.

? ? hrtime(true).PHP_EOL.

? ? hrtime(true).PHP_EOL.

? ? hrtime(true).PHP_EOL.

? ? hrtime(true).PHP_EOL;

? ??

// microtime

echo microtime(true).PHP_EOL.

? ? microtime(true).PHP_EOL.

? ? microtime(true).PHP_EOL.

? ? microtime(true).PHP_EOL.

? ? microtime(true).PHP_EOL.

? ? microtime(true);

結(jié)果:


25558478919927842

25558478919929611

25558478919930289

25558478919930576

25558478919930779

1597318697.2849

1597318697.2849

1597318697.2849

1597318697.2849

1597318697.2849

1597318697.2849

上面相當(dāng)于幾個(gè)用戶會(huì)同時(shí)訪問(wèn)機(jī)票訂單。正如你所看到的,微時(shí)間是不夠的。


但您可以使用上面的最后 5 個(gè)數(shù)字,即 27842,并且很可能是唯一的。


除此之外,您可以在前面放置一個(gè)用戶 ID 以獲得更多熵。


如果您想要連續(xù)且 100% 防止重復(fù),那么您唯一的選擇是使用存儲(chǔ)在數(shù)據(jù)庫(kù)中的增量 ID。


查看完整回答
反對(duì) 回復(fù) 2023-10-01
?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

如果票號(hào)不必按特定順序排列,您可以生成隨機(jī)票號(hào):


function generate_string($input, $strength = 10) {


$input_length = strlen($input);

$random_string = '';

for ($i = 0; $i < $strength; $i++) {

    $random_character = $input[random_int(0, $input_length - 1)];

    $random_string .= $random_character;

}


return $random_string;

}

與例如


$input = '0123456789';

甚至


$input = '0123456789ABCDEF';

對(duì)于十六進(jìn)制票號(hào)。


查看完整回答
反對(duì) 回復(fù) 2023-10-01
  • 2 回答
  • 0 關(guān)注
  • 155 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)