更新快取失敗重試
阿新 • • 發佈:2018-12-19
使用者進行寫資料的時候,對於一些資料需要進行對快取的更新,但是如果快取更新失敗怎麼辦?
這裡是一個非同步更新快取的簡易例項
package sunziwen; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.function.Supplier; /** * 更新快取 * * @author sunziwen * 2018-08-14 15:34 * @version 1.0 **/ public class Main { public static void main(String args[]) { ExecutorService executor = Executors.newFixedThreadPool(10); System.out.println("執行插入資料庫動作"); updateCache("鍵", "值"); System.out.println("執行完畢返回請求"); } /** * 非同步更新快取 * * @param key * @param value */ public static void updateCache(String key, String value) { int count = 0; ExecutorService executor = Executors.newFixedThreadPool(10); CompletableFuture<String> cupdResult = CompletableFuture.supplyAsync(new Supplier<String>() { public String get() { System.out.println("更新快取失敗"); try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } return "false"; } }, executor); /** * 非同步任務完成後的回撥方法 */ cupdResult.thenAccept(new Consumer<String>() { @Override public void accept(String s) { if (s.equalsIgnoreCase("false")) { System.out.println("再次嘗試更新"); updateCache(key, value); } } }); } }
重試更新次數到達一定次數後(16),如果還是更新失敗,就要放棄重試,進行快取Key值清除,讓訪問者直接命中資料庫後再次進行快取操作。