1、按照固定时间间隔重试,比如100毫秒;这种方式在网络不稳定时重连可能造成某一时间点流量同时发送,阻塞网络;或者造成发送一些无意义的请求;
2、按照指数时间间隔重试,比如刚开始100毫秒,下一次200毫秒等;比如支付宝和第三方集成时就是类似方式。
固定时间间隔重试:
- @Test
- public void testFixedBackOff() {
- long interval = 100;
- long maxAttempts = 10;
- BackOff backOff = new FixedBackOff(interval, maxAttempts);
- BackOffExecution execution = backOff.start();
- for(int i = 1; i <= 10; i++) {
- //每次重试时间是100毫秒
- System.out.println(execution.nextBackOff());
- }
- Assert.assertEquals(BackOffExecution.STOP, execution.nextBackOff());
- }
interval是重试间隔,maxAttempts是最大重试次数,如果重试到了maxAttempts,则execution.nextBackOff()=BackOffExecution.STOP。
指数时间间隔重试:
- @Test
- public void testExponentialBackOff() {
- long initialInterval = 100;//初始间隔
- long maxInterval = 5 * 1000L;//最大间隔
- long maxElapsedTime = 50 * 1000L;//最大时间间隔
- double multiplier = 1.5;//递增倍数(即下次间隔是上次的多少倍)
- ExponentialBackOff backOff = new ExponentialBackOff(initialInterval, multiplier);
- backOff.setMaxInterval(maxInterval);
- //currentElapsedTime = interval1 + interval2 + … + intervalN;
- backOff.setMaxElapsedTime(maxElapsedTime);
- BackOffExecution execution = backOff.start();
- for(int i = 1; i <= 18; i++) {
- System.out.println(execution.nextBackOff());
- }
- Assert.assertEquals(BackOffExecution.STOP, execution.nextBackOff());
- }
initialInterval是初始重试间隔,maxInterval是最大的重试间隔, multiplier是递增倍数,maxElapsedTime是重试的最大时长。
今天的文章redis淘汰机制有几种_redis淘汰机制有几种分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/75502.html