久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      php怎么生成字符串唯一不重復(fù)

      php生成字符串唯一不重復(fù)的方法:1、當(dāng)前時(shí)間戳進(jìn)行md5加密,截取前6位;2、使用數(shù)據(jù)庫bigint自增字段,轉(zhuǎn)成62進(jìn)制縮短長度。

      php怎么生成字符串唯一不重復(fù)

      本文操作環(huán)境:windows7系統(tǒng)、PHP7.1版,DELL G3電腦

      PHP怎么生成6位的不重復(fù)的字符串?

      PHP生成6位的不重復(fù)的字符串(類似 UUID)

      我們要考慮到:

      1、不重復(fù)。

      2、安全性。

      【 不建議使用啥敏感的數(shù)據(jù)作為訂單生成規(guī)則(例如:用戶UID,訂單自增ORDER_ID等),以為會(huì)暴露網(wǎng)站一些敏感信息】

      3、不能使用大規(guī)模隨機(jī)碼。

      why?
      1. 首先問你"編程語言中的隨機(jī)能做到真隨機(jī)嗎?",我可以不自信的告訴你至少PHP做不到,所以可能導(dǎo)致第一個(gè)"不重復(fù)"原則發(fā)生
      2. 如果你的訂單數(shù)量到達(dá)了1000w次,你每次生成訂單編碼時(shí)就得對比1000w條歷史數(shù)據(jù),一般在500w的時(shí)候,你得花時(shí)間在數(shù)據(jù)庫優(yōu)化上(簡單處理:采用分區(qū),建立索引,然而實(shí)際性要求高,可能需要在主數(shù)據(jù)庫下操作,可想你有多痛,當(dāng)然對于數(shù)據(jù)庫實(shí)時(shí)讀寫還有其他的優(yōu)化辦法,在此不作介紹)。

      4、防止并發(fā)。

      5、控制位數(shù)。

      why? 1. 便于查詢檢索 2 位數(shù)控制到 10-20位即可,當(dāng)然網(wǎng)上將的是10~15緣由是利于輸入,對于輸入太長做好用戶體驗(yàn)就好(新增復(fù)制訂單按鈕)

      6、盡量具有業(yè)務(wù)意義(不是強(qiáng)制的,根據(jù)公司業(yè)務(wù)來)

      【當(dāng)你業(yè)務(wù)比較龐大時(shí)候,或者后期有大規(guī)模的擴(kuò)充時(shí),建議考慮下訂單的生成意義,根據(jù)公司的業(yè)務(wù)做調(diào)整。舉個(gè)最簡單的例子:"一個(gè)賣化妝品的商城,你需要根據(jù)訂單來源來(pc/移動(dòng))來生成報(bào)表,這時(shí)候可能需要"】

      7.解決辦法

      // 類似生成 UUID ,不依賴外部流水號(hào),完全靠時(shí)間戳和隨機(jī)數(shù)生成訂單號(hào)無法避免沖突, // 所以必須引入外部的流水號(hào)生成機(jī)制?;蚴褂脭?shù)據(jù)庫,或使用APC之類的緩存。 // 用APC之類的緩存存在一個(gè)問題,就是無法持久保持?jǐn)?shù)據(jù),服務(wù)器重啟或者PHP宿主進(jìn)程重啟都會(huì)清空流水號(hào)計(jì)數(shù)器, // 所以可以采取緩存+數(shù)據(jù)庫結(jié)合的模式——如果緩存中有流水號(hào)計(jì)數(shù)器數(shù)據(jù)則讀取并累加計(jì)數(shù),如果緩存中沒有流水號(hào)計(jì)數(shù)器從數(shù)據(jù)庫中還原計(jì)數(shù)器。 // 計(jì)數(shù)器可以每隔一段時(shí)間重置一次。既然引入了自增流水號(hào)計(jì)數(shù)器,又會(huì)導(dǎo)致文章開頭的“德國坦克問題”, // 所以需要用skip32算法把流水號(hào)加密 // (https://github.com/nlenepveu/Skip32)。  // 訂單號(hào) = 日期前綴 + 加密流水號(hào)  // Skip32 算法加密密鑰 const ENCRYPTED_KEY = 'xxxxxxxxxxxx';  // 使用 Wincache 作為流水號(hào)計(jì)數(shù)器緩存 function getOrderSerialNumber() {     $timestamp = time();     $datePrefix = date('ymd', $timestamp); // 如果流水號(hào)計(jì)數(shù)器數(shù)據(jù)不在緩存中,則嘗試從數(shù)據(jù)庫中恢復(fù)     if (false === ($value = wincache_ucache_inc($datePrefix))) {     wincache_lock($datePrefix); // 從數(shù)據(jù)庫中獲取今日的訂單數(shù)     $counter = getNumberOfOrdersTodayFromDatabase($timestamp);     $value = $counter + 1; if (!wincache_ucache_add($datePrefix, $value, 60*60*24)) {     $value = wincache_ucache_inc($datePrefix); }     wincache_unlock($datePrefix); }     return $datePrefix.str_pad(Skip32::encrypt($datePrefix.ENCRYPTED_KEY, $value), 10, '0', STR_PAD_LEFT); }

      簡單方式:

      1.當(dāng)前時(shí)間戳md5加密,截取前6位

      echo substr(md5(microtime(true)), 0, 6);

      2.使用數(shù)據(jù)庫bigint自增字段,轉(zhuǎn)成62進(jìn)制縮短長度

      echo gmp_strval(gmp_init('9876543210', 10), 62);

      推薦:《PHP視頻教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)