[問題] 一個後端的設計問題?

看板java作者 (無尾熊)時間8年前 (2016/03/11 12:20), 編輯推噓5(5011)
留言16則, 8人參與, 最新討論串1/1
請問一下: 我在server寫一個List,供應很多前端app client取資料,然後我固定半小時才去 資料庫更新一次這個List。這是個Restful API。 我會這樣做的原因是手機app client端有上萬個用戶,我不想每次拿資料都要進出 一趟資料庫,所以才想弄一個List在server本地端,每半小時再去資料庫更新一次 資料。 但我一直有一個疑問,當我去資料庫更新的時候,如果那一刻(秒),剛好有前端 Client來取資料,請問這時這個app會: 1.取到舊的資料 2.出錯,exception ? EX: in some class: localList = getUpdatedDataFromDatabase(); 剛好在做這個動作時,有client要拿資料,此時會怎麼樣? 要做什麼措施避免混亂?還是這個方法根本不好? 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 68.5.180.240 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1457670014.A.559.html

03/11 13:05, , 1F
新的list用另外建的然後整個換成新的instace就好 不要去修
03/11 13:05, 1F

03/11 13:06, , 2F
改舊的List的內容 這樣client頂多拿到舊的
03/11 13:06, 2F

03/11 13:12, , 3F
感謝樓上大大的回覆!
03/11 13:12, 3F

03/11 14:37, , 4F
關鍵字「執行緒安全」
03/11 14:37, 4F

03/11 14:38, , 5F
主要還是要看你的程式碼怎麼寫
03/11 14:38, 5F

03/11 14:39, , 6F
這是一個超大的問題
03/11 14:39, 6F

03/11 14:39, , 7F
課題
03/11 14:39, 7F

03/11 14:40, , 8F
絕大多數是加個 synchronized 就可以解決掉的狀況
03/11 14:40, 8F

03/11 17:36, , 9F
CopyOnWriteArrayList
03/11 17:36, 9F

03/11 17:37, , 10F
如果是用修改的話
03/11 17:37, 10F

03/11 22:53, , 11F
我想你要做的是 in memory cache 吧?你要自己來嗎?
03/11 22:53, 11F

03/11 22:53, , 12F
還是透過第三方 java 函式庫?
03/11 22:53, 12F

03/12 17:42, , 13F
可以用 Collections.synchronizedList
03/12 17:42, 13F

03/12 17:42, , 14F
不過直接替換掉比較好就是了
03/12 17:42, 14F

03/12 21:31, , 15F
CopyOnWrite +1
03/12 21:31, 15F

03/13 22:02, , 16F
自己用 List 不一定比較高效率喔...
03/13 22:02, 16F
文章代碼(AID): #1MuaT-LP (java)