当前位置:首页 > 数码 > 大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)

大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)

admin8个月前 (04-13)数码72

受网络和运转环境影响,运行程序或许遇到临时性缺点,如刹时网络颤抖、服务临时无法用、服务忙碌造成超时等。

智能重试机制可大幅防止此类缺点,保证操作成功口头。

1引发临时性缺点的要素 1.1缺点触发了高可用机制

云支持节点肥壮形态监测,当监测到实例中的主节点无法用时,会智能触发主备切换,例如将主节点和从节点启动调换,保证实例的高可用性。此时,客户端或许会遇到下列临时性缺点:秒级的衔接闪断。30秒内的只读形态(用于防止主备切换惹起潜在的数据失落危险和双写)。

更多参见:主备切换()

1.2慢查问惹起了恳求梗塞

口头期间复杂度为O(N)的操作,引发慢查问和恳求的梗塞,此时,客户端动员的其余恳求或许出现临时性失败。

1.3复杂的网络环境

由于客户端与Redis主机之间复杂网络环境惹起,或许出现偶发的网络颤抖、数据重传等疑问,此时,客户端动员的恳求或许会出现临时性失败。

2介绍的重试准绳 2.1仅重试幂等的操作

由于超时或许出当初下述任一阶段:该命令由客户端发送成功,但尚未抵达Redis。命令抵达Redis,但口头超时。命令在Redis中口头完结,但结果前往给客户端时出现超时。假设口头重试或许造成某个操作在Redis中被重复口头,因此不是一切操作均适宜设计重试机制。通常介绍仅重试幂等的操作,例如SET操作,即屡次口头SETab命令,那么a的值只或许是b或口头失败;假设口头LPUSHmylista则不是幂等的,或许造成mylist中蕴含多个a元素。

2.2适当的重试次数与距离

依据业务需求和实践场景调整适当的重试次数与距离,否则或许引发下述疑问:假设重试次数无余或距离太长,运行程序或许无法成功操作而造成失败。假设重试次数过大或距离过短,运行程序或许会占用过多的系统资源,且或许因恳求过多而梗塞在主机上无法复原。经常出现的重试距离形式包括立刻重试、固定期间重试、指数参与期间重试、随机期间重试等。

2.3防止重试嵌套

防止重试嵌套,否则或许会造成重复的重试且无法中止。

2.4记载重试意外并打印失败报告

在重试环节中,倡导在WARN级别上打印重试失误日志,同时,仅在重试失败时打印意外信息。

倡导经常使用Jedis4.0.0及以上版本,介绍经常使用最新的Jedis版本,以下代码为Jedis5.0.0的重试示例。

大厂redis面试题

3.1参与Jedis的Pom依赖<dependency>

<groupId>redis.clients</groupId>

3.2重试实战①规范架构实例或集群架构代理(Proxy)形式

经常使用JedisPool形式。

该示例会将SET命令智能重试5次,且总重试期间不超越10s,每次重试之间期待类指数距离的期间,假设最终不成功,则抛出意外。

PooledConnectionProviderprovider=newPooledConnectionProvider(HostAndPort.from("127.0.0.1:6379"));

intmaxAttempts=5;//最大重试次数

DurationmaxTotalRetriesDuration=Duration.ofSeconds(10);//最大的重试期间

UnifiedJedisjedis=newUnifiedJedis(provider,maxAttempts,maxTotalRetriesDuration);

System.out.println("setkey:"+jedis.set("key","value"));

}catch(Exceptione){

//示意尝试maxAttempts次或抵达了最大查问期间maxTotalRetriesDuration依旧没有访问成功。

e.printStackTrace;

②集群架构直连形式

经常使用JedisCluster形式。

可以经过性能maxAttempts参数来定义失败状况下的重试次数,自动值为5,假设最终不成功,则抛出意外。

HostAndPorthostAndPort=HostAndPort.from("127.0.0.1:30001");

intconnectionTimeout=5000;

intsoTimeout=2000;

intmaxAttempts=5;

ConnectionPoolConfigconfig=newConnectionPoolConfig;

JedisClusterjedisCluster=newJedisCluster(hostAndPort,connectionTimeout,soTimeout,maxAttempts,config);

System.out.println("setkey:"+jedisCluster.set("key","value"));

}catch(Exceptione){

//示意尝试maxAttempts之后依旧没有访问成功。

e.printStackTrace;

Redisson客户端提供了两个参数来控制重试逻辑:

重试示例如下:

Configconfig=newConfig;

config.useSingleServer

.setTimeout(1000)

.setRetryAttempts(3)

.setRetryInterval(1500)//ms

.setAddress("redis://127.0.0.1:6379");

RedissonClientconnect=Redisson.create(config);

5StackExchange.Redis

StackExchang.Redis客户端目前仅支稳健试时衔接,重试示例如下:

varconn=ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,connectRetry=3");

说明

如需成功API级别的重试战略,请参见Polly。

Lettuce客户端未提供在命令超时后重试的参数,然而您可以经过下述参数来成功命令重试战略:

说明

重试示例:

clientOptions.isAutoReconnect?Reliability.AT_LEAST_ONCE:Reliability.AT_MOST_ONCE;

参考:


为什么大学课程不开设php?

你可以不会PHP,但你必须会ASP。 再有就是教师水平,老师每天教学工作很忙,还要写论文,评职称,很难挤出时间去学习新知识,尤其今天流行PHP,明天可能就是别的了,教和学还不一样,必须对语言有深刻了解,教学成本偏高。 第三就是PHP还没有达到Java那种主流地位,就像现在各大学,书店为什么铺天盖地学Java呢,同样是一种惯性,也正因为这种惯性,造成了国内软件市场的单一,对新技术接受能力低下。 现在国外已经开始逐渐向云计算语言转型了,我们却仍在跨平台阶段摸索。 大量轻量级语言涌现,国内对此还知之甚少。 所以说,因为市场需要主流的东西,所以学校必须迎合这个趋势,本来就很落后的大学教育,再不讲点有实际意义的,那就没什么盼头了。 PHP只是很容易上手,并不是简单,一个星期只能说弄明白PHP是怎么回事,还得有C语言之类的基础,否则半年之内很难写出什么像样的东西。

wcf怎么和redis缓存结合

Redis是一个不错的缓存数据库,读取数据速度效率都很不错。 今天大家共同研究下redis的用法。 结合网上的资料和自己的摸索,先来看下安装与配置把。 咱们主要看在WINDOWS上怎样使用REDIS数据库。 下载地址:1. 选择一个版本进行下载,我们这里使用Redis-2.1.5 - Win32版本的。 下载解压后的文件如下图:2. 在D建立一个redis 文件夹(当然建在其他盘也可以),然后把上面解压的32bit文件夹下面的所有文件拷贝到redis文件夹里面。 3.打开服务器端 通过CMD命令行打开服务器端,首先通过命令行转到d:\redis文件夹,然后输入如下命令 4.打开客户端 服务器端的CMD命令行不要关闭,再单独打开一个CMD命令行,切换到d:\redis文件夹,输入如下命令 -h 127.0.0.1 -p 6379 然后输入 set pwd get pwd获取返回值成功,说明服务器端配置成功,中怎样使用Redis存储数据. 在中比较常用的客户端类库是ServiceStack,看下通过servicestack怎样存储数据。 DLL下载:,下载完成后,DLL中包括四个DLL文件,然后把这四个文件添加到自己的项目中。 6.示例代码 Redis中包括四种数据类型,Strings, Lists,Sets, Sorted Sets接下来我们一一看这四种类型的用法。 [csharp] view plaincopyprivate void Redis(){RedisClient client = new RedisClient(127.0.0.1, 6379);(username, 郭靖);(pwd, );string username = (username);int pwd = (pwd);(读取缓存, + 姓名: + username + ,密码: + pwd + );}private void RedisForManyServer(){using (var manager = new PooledRedisClientManager(127.0.0.1, 192.1680.30.90)){IRedisClient iclient = ();UserInfo user = new UserInfo(); = 杨过; = 18;(user, user);UserInfo user2 = (user); (读取分布式缓存集群, + 姓名: + + ,年龄: + + ); } }

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Redis

“大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)” 的相关文章

Redis数据删除后-内存占用为何居高不下 (redis数据类型)

Redis数据删除后-内存占用为何居高不下 (redis数据类型)

作为面试经验丰富的开发人员,肯定会遇到过这样的问题:做了数据删除操作,为什么使用 top 命令时,仍然显示 Redis 占用了大量内存? 答案 这是因为当数据删除后,Re...

一站式-满足您的所有-解决方案-需求-Redis-Redis (一站式满足您的资金需求让您用款无忧)

一站式-满足您的所有-解决方案-需求-Redis-Redis (一站式满足您的资金需求让您用款无忧)

Introduction Redis is an efficient in-memory database designed to store data invarious formats, s...

Redis中分布式锁的防死锁机制 (redis中文网)

Redis中分布式锁的防死锁机制 (redis中文网)

分布式锁在分布式系统中是一种常见的需求。它用于防止对共享资源的并发访问,确保数据一致性和可靠性。在 Redis 中实现分布式锁可以通过使用 SETNX(SET if Not eXists)命令来尝...

探索强大的工具优化集群性能和可靠性-Redis运维神器 (探索强大的工作有哪些)

探索强大的工具优化集群性能和可靠性-Redis运维神器 (探索强大的工作有哪些)

监控工具 INFO 命令 INFO 命令是 Redis 提供的监控命令,可以返回丰富的实例运行监控信息。INFO 命令的参数为 section,取值如下:...

Redis-使用哈希槽而非一致性哈希的原因 (redis淘汰策略有哪些)

Redis-使用哈希槽而非一致性哈希的原因 (redis淘汰策略有哪些)

引言 在分布式系统中,数据分片和负载均衡是至关重要的。哈希槽和一致性哈希两种方法都可以实现这些目标,但它们各有优缺点。本文将讨论为什么在某些情况下使用哈希槽而不是一致性哈希。 哈希槽 哈希...

成功多规则限流的思索与通常-Redis (成功的规则)

成功多规则限流的思索与通常-Redis (成功的规则)

市面上很多引见如何成功限流的,然而大局部都有一个缺陷,就是只能成功繁多的限流,比如1分钟访问1次或许60分钟访问10次这种,然而假构想一个接口两种规则都须要满足呢,咱们的名目又是散布式名目,应该如何处...

Redis-全面了解数据耐久性和复原机制-深度解析-耐久化 (redis淘汰策略有哪些)

Redis-全面了解数据耐久性和复原机制-深度解析-耐久化 (redis淘汰策略有哪些)

我们都知道在关于的开发或许面试的环节中,很容易就会遇到这个关于Redis耐久化的疑问,而我们在面试的时刻,经常会有小同伴只能说出这个Redis耐久化的两种形式,后续或许还会对比一些区别,然而关于怎...