開發中經常需要一些流水號,作為編碼保存在數據庫中。
1、在當前業務表上取編碼的最大值,然后加一。當有多個線程同時取最大值時,則可能取到同一個數;或者第一個線程取到號后還沒有保存,另一個線程也來取號,取到的也是同一個數,就會出現重號。如果對整張表加鎖,會影響效率和并發性
2、建立一張保存流水號的配置表,保存當前編碼的最大值。多個線程同時訪問時,也會出現取到同一個數的情況,但是這時候可以鎖住行數據,效率比方法1高很多。
3、redis存儲,跟數據庫差不多的特點,只不過比數據庫要快,核心是incr和incrby兩個命令。但要開啟持久化AOF,宕機后可以恢復。
綜上所述,實現數據庫流水號要保證唯一、支持高可用、高并發等業務需要。