问题起因:组内同时对一同学的cr中有一个评论,需要把根据id获取数据这样的接口由POST改成GET,的确是该这样,但是大佬的评论是POST是非幂等,而现在的请求的幂等的。。。
云里雾里,主要是因为,我压根就不记得幂等到底是啥意思了,果断去百度了下防止丢人。
下面摘一个介绍:
特点
任意多次执行所产生的影响均与一次执行的影响相同。
不会影响系统状态,也不用担心重复执行会对系统造成改变。
举例
HTTP请求中的GET,HEAD,PUT和DELETE方法都有这样的幂等属性(POST不是)
解释一下为什么PUT操作是幂等的,而POST不是.
假设原有资源为A
- 执行一次PUT,将A变成了B,后面不管执行多少次相同的PUT,资源还是B。因为PUT主要是更新资源。
- 执行一次POST,将A变成B,后面即使每执行的都是相同的POST,依然会在此创建资源B。因为POST是创建资源。
协议都是人定的。只要客户端和服务器能彼此认同,就能工作。在常规的情况下,用符合规范的方式去实现系统可以减少很多工作量——大家都约定好了,就不要折腾了。但是,总会有一些情况用常规规范不合适,不满足需求。这时思路也不能被规范限制死,更不要死抠RFC。这些规范也许不能处理你遇到的特殊问题。比如:
协议是死的,人是活的。遇到实际的问题时灵活的运用手上的工具满足需求就好。
突然想起了前段时间,听了一个DTS(数据传输服务)的讲座,讲座的同学讲: redis的DTS是存在数据不一致问题的,比如数据由redis集群 A 同步到集群B, A的操作记录在同步到B的时候,A未收到反馈,这时候就存在两种情况,1是A没发出去,2是A发出去B处理成功了,但是因为网络问题A没收到,这时候A只能重新发送刚才的操作命令,如果是incr命令,且是因为原因2引起的重试,这时候就相当于同一个key被incr了两次,这就是所谓的不幂等了。
原文:https://www.cnblogs.com/liuyong18/p/13204955.html