mysql - 在一个多人共享的文件夹内, 创建文件夹/文件, 名字重复加数字后缀有没有好的算法
伊谢尔伦
伊谢尔伦 2017-04-17 16:46:40
0
4
504
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(4)
刘奇

使用Redis的Bitmap很適合用來解決這個問題,以「照片」為例

  1. "照片"為key建立bitmap,值為1的bit代表已經使用(也不用建立,直接查詢就可以)

  2. 找出最左為0的bit的索引:bitpos "照片" 0

  3. 找到的索引就是最小的數字空位

注意:如果多伺服器、多執行緒並發,可以考慮使用Redis實作的分散式鎖定,又或者使用watch指令
偽程式碼如下

if ('OK'.equals(redis.setnx("照片.lock")) {
    pos = redis.bitpos("照片", 0);
    redis.setbit("照片", pos, 1);
    return pos;
}
PHPzhong

hash表以檔案名稱做key,自從產生一個[1..MaxNum]的有序List,MaxNum取一個你認為合理的數字。同步hash表。
每次建立檔案時查詢hash表有沒有該key,有就list.pop第一值。
每次刪檔案時,把檔案()裡的數字push回list
hash表控制大小,超的資料可以儲存在檔案系統【資料庫等】,每次查詢hash找不到資料時,就需要去檔案系統查找調用。類似記憶體分頁快取機制。

伊谢尔伦

雷雷

伊谢尔伦

最簡單的一個想法就是維護兩組資料
偽代碼

removeNameArray = {};
NameArrayLen = 0;
if(removeNameArray.length>0){
    name = removeNameArray.pop();
}else{
    name = name+(NameArrayLen++);
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板