小伙看你根骨奇佳,潜力无限,来学PHP伐。
使用Redis的Bitmap很適合用來解決這個問題,以「照片」為例
"照片"為key建立bitmap,值為1的bit代表已經使用(也不用建立,直接查詢就可以)
找出最左為0的bit的索引:bitpos "照片" 0
找到的索引就是最小的數字空位
注意:如果多伺服器、多執行緒並發,可以考慮使用Redis實作的分散式鎖定,又或者使用watch指令偽程式碼如下
if ('OK'.equals(redis.setnx("照片.lock")) { pos = redis.bitpos("照片", 0); redis.setbit("照片", pos, 1); return pos; }
hash表以檔案名稱做key,自從產生一個[1..MaxNum]的有序List,MaxNum取一個你認為合理的數字。同步hash表。 每次建立檔案時查詢hash表有沒有該key,有就list.pop第一值。 每次刪檔案時,把檔案()裡的數字push回listhash表控制大小,超的資料可以儲存在檔案系統【資料庫等】,每次查詢hash找不到資料時,就需要去檔案系統查找調用。類似記憶體分頁快取機制。
雷雷
最簡單的一個想法就是維護兩組資料偽代碼
removeNameArray = {}; NameArrayLen = 0; if(removeNameArray.length>0){ name = removeNameArray.pop(); }else{ name = name+(NameArrayLen++); }
使用Redis的Bitmap很適合用來解決這個問題,以「照片」為例
"照片"為key建立bitmap,值為1的bit代表已經使用(也不用建立,直接查詢就可以)
找出最左為0的bit的索引:bitpos "照片" 0
找到的索引就是最小的數字空位
注意:如果多伺服器、多執行緒並發,可以考慮使用Redis實作的分散式鎖定,又或者使用watch指令
偽程式碼如下
hash表以檔案名稱做key,自從產生一個[1..MaxNum]的有序List,MaxNum取一個你認為合理的數字。同步hash表。
每次建立檔案時查詢hash表有沒有該key,有就list.pop第一值。
每次刪檔案時,把檔案()裡的數字push回list
hash表控制大小,超的資料可以儲存在檔案系統【資料庫等】,每次查詢hash找不到資料時,就需要去檔案系統查找調用。類似記憶體分頁快取機制。
雷雷
最簡單的一個想法就是維護兩組資料
偽代碼