首页
学习
活动
专区
圈层
工具
发布

后端程序员必会:并发情况下redis-lua保证原子操作

前言 本文主要是分享在实际工作中同事遇到的问题案例;活动组在做活动时,开发人员未考虑到接口并发场景,导致因为一些用户在实际抽奖(土豪一般都是狂抽)过程中对余额产生了增加/减少的操作,导致缓存的余额出现异常...;通过我review代码发现,开发者在更新缓存时:先get后set或者incrby,导致并发场景下get的值是一致的,所以缓存异常。...,并不是所有的脚本都适合缓存,造成不必要的内存浪费) ➜ ~ redis-cli --raw evalsha b3e2eb6aa7bdb29e60f32cd153612a2887164b70 0 大家好...其实,在实际开发过程中,我们找不到问题所在的时候,一定要多打日志,我们只有通过日志才能更好地找到问题所在,而不是一味的抱怨,抱怨解决不了任何问题。...PS:这个通过日志来看脚本问题,还是比较重要的,如果不能一眼看出你脚本问题,那么请尽量的保证你多打点日志查问题。

2.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    *当你在浏览器地址栏输入一个URL后回车,将会发生什么事情?*

    * 参考原文: http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 前言:为了对网络应用如何工作有一个完整的层次化的认知...——如果浏览器不包含所需的记录,则浏览器将进行系统调用(Windows中为gethostbyname),操作系统是具有自己的DNS缓存的。...*除GET请求外,还有一种常见请求是POST请求通常用于提交表单,二者的区别是GET请求不能带正文,但可以在URL中带参数;POST请求可以带正文,并在正文中携带参数。...,因为不清楚folderOrFile是文件夹还是文件,这种情况下,浏览器将在不带斜杠的情况下访问URL,并且服务器通过重定向进行响应,从而导致了不必要的往返。...异步请求是通过编程构造的GET或POST请求,该请求将转到一个特殊的URL;这种模式有时也称为“AJAX”,代表“Asynchronous JavaScript And XML”,即“异步JavaScript

    2.9K30

    RFC2616-HTTP1.1-Methods(方法规定部分—译文)

    此方法允许客户端确定与资源或服务器功能相关的选项和(或)需求,而不涉及资源操作或启动资源检索。对该方法的响应是不能缓存的。   ...条件GET方法旨在减少不必要的网络请求,它允许刷新缓存的实体,而不需要多个请求或传输客户端里已经存在的数据。   ...部分GET方法旨在完成对实体的部分检索而不传输客户端已经存在的数据来减少不必要的网络请求。   当且仅当它满足第13节中所描述的有关HTTP缓存的要求时,对GET请求的响应是可以被缓存的。   ...在HEAD请求所返回的响应中所包含的头部源信息应该跟GET请求所返回的响应中的信息相同。该方法可用于在不转移实体本身的情况下获得请求所隐含的有关于实体的源信息。...如果请求是有效的,响应应该包含实体主体中的整个请求消息,其中包含了一个值为“message/http”的Content-Type。TRACE方法的响应是不能缓存的。

    63630

    HTTP状态码详解:从400到504的故障排查指南

    HTTP状态码详解:从400到504的故障排查指南 引言 在现代Web开发和API交互中,HTTP状态码是客户端和服务器之间沟通的重要桥梁。它们不仅告诉我们请求是否成功,还能快速定位问题所在。...请求头Content-Type不匹配(如需要application/json但发送了text/plain)。 URL包含非法字符(如未转义的空格)。...解决方法: 优化服务器响应速度(如缓存、数据库索引)。...Nginx超时配置示例: proxy_read_timeout 60s; # 默认60秒,可适当延长 解决方法: 优化后端性能(如数据库索引、缓存)。 调整代理超时时间。 4....总结与最佳实践 4.1 状态码速查表 状态码 类型 含义 典型场景 400 客户端错误 请求语法错误 参数缺失、JSON格式错误 404 客户端错误 资源不存在 URL拼写错误 406 客户端错误 响应格式不匹配

    2K10

    18 个运维必知的 Nginx 代理缓存配置技巧,你都掌握了哪些呢?

    它是可选的; 不指定值允许缓存增长以使用所有可用磁盘空间。当缓存大小达到限制时,一个称为缓存管理器的进程将删除最近最少使用的缓存,将大小恢复到限制之下的文件。...我们建议您将此参数设置 off 为避免在文件系统之间进行不必要的数据复制。use_temp_path 在 Nginx 1.7.10 中引入。...如果客户端请求缓存但是由缓存控制头定义的过期的内容,则 Nginx将 If-Modified-Since 字段包含在 GET 请求的标头中将它发送到源服务器。...在完全下载更新的文件之前,将为所有请求返回陈旧文件。 与 proxy_cache_lock 启用,如果多个客户端请求的文件不在缓存(MISS),只有第一个这些请求是通过原始服务器的。...结论 至此,您应该很好地理解 Nginx 代理缓存的工作原理以及如何正确配置 Nginx 代理缓存。如果您有任何问题或反馈,请随时发表评论。

    3.5K20

    前端性能优化-雅虎军规35条

    区分静态内容和动态内容,避免以后页面访问中不必要的HTTP请求。...实现页面有秩序地加载,这对于拥有较多内容的页面和网速较慢的用户来说更为重要,同时,HTML规范清楚指出样式表要放包含在页面的区域内; 7、把JS放到底部 HTTP/1.1 规范建议,浏览器每个主机名的并行下载内容不超过两个...在url小于2K时使用GET获取数据时更加有意义。 18、延迟加载 确定页面运行正常后,再加载脚本来实现如拖放和动画,或者是隐藏部分的内容以及折叠内容等。...29、避免使用滤镜 完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式来代替,这种格式能在IE中很好地工作。...35、打包组件成复合文本 页面内容打包成复合文本就如同带有多附件的Email,它能够使你在一个HTTP请求中取得多个组件(切记:HTTP请求是很奢侈的)。

    1.6K50

    小程序与网络请求优化

    小程序与网络请求优化一、引言在小程序开发中,网络请求是应用与服务器交互的关键部分。随着小程序功能的逐步丰富,越来越多的业务逻辑依赖于网络请求来获取和提交数据。...请求处理时间:小程序处理请求并解析数据的时间。请求次数过多每次用户操作都发送请求,或者在页面中存在不必要的重复请求,都会导致性能问题。频繁的网络请求增加了带宽占用,并可能导致服务器负载过高。...对于不同类型的请求,选择合适的请求方式和方法可以显著减少延迟和不必要的资源消耗。GET 请求:适用于获取数据的请求,不会对服务器资源造成副作用,通常用于查询数据。...选择合适的请求方法可以优化请求的性能,尤其是在涉及大量数据传输时,POST 请求通常比 GET 请求更适合。...通过合理使用缓存、批量请求、数据压缩等策略,开发者能够在保证数据传输准确性的同时,提高应用的响应速度。希望本文提供的网络请求优化策略,能为你的开发工作提供帮助,打造高效、快速的小程序应用。

    62010

    AI三连误诊后,我终于抓住了grpc protobuf序列化的‘幽灵bug’

    使用工具Cursor排查过程第一回合 AI的“想当然”我直接把报错信息贴给它,并告诉它:服务日志中有报错,请帮我分析可能导致这个报错的原因Cursor看起来很认真地扫描了项目,分析了错误,并给出了问题原因...唯一有用的是这句话:这个错误是由于protobuf序列化时大小计算不匹配导致的这句话给了我一些思路,我大概知道是哪里出问题了。但为了再“拷打”一下AI,我决定继续提醒它。...其实在 AI 第一次给出可能原因时,我就大概知道问题所在了。几轮下来,cursor 一直没能抓住这一点。技术深析它提到缓存的并发访问可能有问题,这只说对了一半。...实际上,并不是并发访问的问题,而是缓存的过期机制有问题。在极端情况下,服务正在打包编码时,突然缓存过期被清除,就会报错。...具体来说,我的服务逻辑如下:从缓存读取数据(假设数据存在,大小为176);开始进行 protobuf 序列化,计算大小(基于缓存数据,得到176);序列化过程中,缓存突然过期被清除,实际读取到的数据不完整

    19100

    数据分析师与需求方的“尔虞我诈”

    令数分师一言难尽、口吐芬芳的需求通常就是临时取数了,不仅是重复劳动,而且临时需求突然的插入,容易打乱原本的工作节奏。 数分师对于临时取数需求的规矩是什么呢?...首先必须不是立刻满足他(视实际情况而定); 其次要给出最全面对策,一方面是能够从根本上解决对方的问题(因为通常一次取数是看不出啥来的,和出轨一样,有一就有二,很容易返工),另一方面也是让需求方重新审视自己的需求是否合理...)领导,您是想看xx的现状情况、问题所在、解决办法吗?...令数分师一言难尽、口吐芬芳的需求通常就是临时取数了,不仅是重复劳动,而且临时需求突然的插入,容易打乱原本的工作节奏。 数分师对于临时取数需求的规矩是什么呢?...)领导,您是想看xx的现状情况、问题所在、解决办法吗?

    72040

    RFC2616-HTTP1.1-Methods(方法规定部分—译文)

    此方法允许客户端确定与资源或服务器功能相关的选项和(或)需求,而不涉及资源操作或启动资源检索。对该方法的响应是不能缓存的。   ...条件GET方法旨在减少不必要的网络请求,它允许刷新缓存的实体,而不需要多个请求或传输客户端里已经存在的数据。   ...部分GET方法旨在完成对实体的部分检索而不传输客户端已经存在的数据来减少不必要的网络请求。   当且仅当它满足第13节中所描述的有关HTTP缓存的要求时,对GET请求的响应是可以被缓存的。   ...有关安全性相关的问题请查阅15.1.3节 9.6 PUT   PUT方法请求一个被请求URI封闭的指定实体。...如果请求是有效的,响应应该包含实体主体中的整个请求消息,其中包含了一个值为“message/http”的Content-Type。TRACE方法的响应是不能缓存的。

    70220

    开放API网关实践(二) —— 重放攻击及防御

    加流水号: 就是双方在报文中添加一个逐步递增的整数, 只要接收到一个不连续的流水号报文(太大或太小), 就认定有重放威胁. 该方法优点是不需要时间同步, 保存的信息量比随机数方式小....时间戳和随机数互补, 既能在时间有效范围内通过校验缓存中的随机数是否存在来分辨是否为重放请求, 也能在缓存失效后(缓存有效时间和时间范围一致)通过时间戳来校验该请求是否为重放. 如图: ?...(二): 缓存过期时间等于有效时间的跨度, 若缓存中已存在该随机数, 则拒绝....结语 重放攻击防御的关键点: 记录请求标识并缓存, 接受请求时校验, 拒绝重放, 即将nonce存入缓存, 拒绝相同的nonce 随机数的方式可能造成过多的缓存, 故需要配合时间戳进行过滤, 时间戳不在有效范围内的一律拒绝...重放攻击是一种常用且有效的攻击手段, 其危害不可忽视, 尽管可以通过业务层面来保障数据的正确性, 但依旧会给系统造成不必要开销, 在网关层过滤掉重放请求是一个不错的选择.

    2.3K20

    谷歌开发者工具基础培训后疑问分享

    : JavaScript 错误排查:控制台可以显示页面上的 JavaScript 错误,测试人员可以点击错误信息查看错误详情,从而快速定位问题所在,并进行修复。...2.监控网络请求:测试人员可以使用控制台面板监视页面中的网络请求和响应,以便测试页面在不同情况下的表现和响应,例如测试页面的 API 请求是否正确、测试页面的性能等。...3.分析网络请求:测试人员可以使用网络面板分析页面中的网络请求和响应,以便测试页面的 API 请求是否正确、测试页面的性能等。...2.查找内存问题:测试人员可以使用内存面板查找页面中的内存问题,例如内存泄漏、不必要的内存占用等,以便及时修复这些问题。...测试人员通常会使用应用面板进行以下场景的测试: 1.调试缓存问题:测试人员可以使用应用面板调试页面的缓存问题,例如清空缓存、禁用缓存、设置缓存策略等,以确保页面在各种情况下都能够正确显示和呈现。

    37720

    如何快速定位线上 CPU 高负载问题

    引言线上 CPU 高负载是许多运维工程师和开发人员经常面临的挑战之一。当 CPU 使用率升高时,系统性能可能会受到严重影响,因此快速定位问题所在至关重要。...本文将介绍一些常见的技术和方法,帮助你迅速找到线上 CPU 高负载问题的根本原因,并提供实际代码示例。1. 监控工具的使用1.1....这可能包括改进算法、减少不必要的计算或使用缓存等措施。5.2. 单元测试和性能测试在进行优化之后,确保编写单元测试和性能测试来验证代码的改进是否有效。...通过使用监控工具、分析 CPU 使用率升高的原因、查看线程和堆栈信息、分析代码、优化和测试,你可以迅速找到问题所在并解决它。高效地处理高 CPU 使用率问题是每位运维工程师和开发人员的必备技能之一。...如果你觉得这篇文章对你有帮助,请点赞和分享,让更多的人学习如何快速定位和解决线上 CPU 高负载问题。谢谢阅读!我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

    1K20

    接口测试基础知识

    Http协议中最常见的接口:Get,Post,Delete,Put,Head,Option。 用法都一样:选择方式,然后传参。 如果工作中遇到问题,可以问开发到底采用的是哪种请求方式。...有些Get请求是没有参数的,根据具体需求来。 ? username=qinghan可以理解为一个键值对,前面是Key,后面是Value。...要想让服务器识别这两个请求是同一个服务器发过去的,Http请求就得带上它的会员卡cookie。 缓存里面除了Cookie,还有图片,Css,Js等这些。...清空了缓存不代表清空了Cookie,清空了Cookie不代表清空了缓存。 6.Session: 服务器有超时机制。在网页或者接口,它会有这个超时的时间,Session叫做会话时间。...有时操作网页,过会不操作了,提示请重新登录。这个是由Session来控制的。 它会有个时间戳,还有个Session id来控制。

    1.5K30

    PyTorch | 加速模型训练的妙招

    尽管你可以探索其他功能,但请记住一个基本原则:启用的选项越少,性能开销也就越低。 例如,如果你的目的是分析 CUDA 内核的执行时间,那么最好的做法是关闭 CPU 分析和其他所有功能。...数据加载 在数据加载方面,我们追求极致的效率,即几乎不耗费时间。 原因在于,在数据加载的过程中,GPU 闲置不工作,这导致资源没有得到充分利用。...那些活动量为零的区域就是我们需要注意的问题所在。在这些区域,GPU 并没有参与任何工作。 解决这个问题的一个简单方法是: 在后台进程中进行数据处理,这样不会受到全局解释器锁(GIL)的限制。...不过,通过使用 get_worker_info() 方法,你仍然可以解决这个问题——你需要调整迭代方式,确保每个工作进程处理的是互不重叠的不同数据行。...释放内存后,分配器会重新开始构建其缓存,这将涉及到大量的 cudaMalloc 调用,这是一个资源消耗较大的操作。

    43810

    雅虎前端优化的35条军规

    9.尽量少用iframe 用iframe可以把一个HTML文档插入到父文档里,重要的是明白iframe是如何工作的并高效地使用它。...20.压缩JavaScript和CSS 压缩具体来说就是从代码中去除不必要的字符以减少大小,从而提升加载速度。代码最小化就是去掉所有注释和不必要的空白字符(空格,换行和tab)。...: "10c24bc-4ab-457e1c1f"HTTP/1.1 304 Not Modified 32.对Ajax用GET请求 使用XMLHttpRequest时,浏览器的POST请求是通过一个两步的过程来实现的...所以最好用GET请求,它只需要发送一个TCP报文(除非cookie特别多)。 IE的URL长度最大值是2K,所以如果要发送的数据超过2K就无法使用GET了。...POST请求的一个有趣的副作用是实际上没有发送任何数据,就像GET请求一样。正如HTTP说明文档中描述的,GET请求是用来检索信息的。

    1.8K50

    功能问题:如何防止接口重复请求?

    前言 防止接口重复请求在软件开发中非常重要,重复请求必然会导致服务器资源的浪费。 因为每次请求都需要服务器进行处理,如果请求是重复的,那么服务器就在做不必要的工作。...在高并发的场景下,这种浪费会成倍增加,可能导致服务器性能下降,甚至引发服务崩溃。 请求队列: 维护一个请求队列,每次发送请求前检查队列中是否已经存在相同的请求。...,并在发送新请求时先取消之前的请求。....'); // 取消之前的请求 } cancelTokenSource = axios.CancelToken.source(); axios.get('https...缓存请求结果: 对于相同的请求,在第一次请求返回结果后将结果缓存起来,后续相同的请求可以直接使用缓存的结果,而不再发送重复请求。 比较容易理解,代码示例略了吧。

    47810

    从Java全栈到Vue3实战:一次真实的面试对话与技术解析

    目前在一家互联网大厂担任Java全栈开发工程师,有5年左右的开发经验。 我的主要工作内容是参与公司核心业务系统的前后端开发,负责模块设计、接口对接以及性能优化。...不过刚开始接触的时候,我对响应式系统的一些细节不太清楚,比如如何避免不必要的重新渲染,或者如何正确使用ref和reactive。...我记得有一个需求是实现一个带搜索和分页功能的表格,我就用了el-table配合el-pagination,并且通过v-model绑定查询条件,再结合axios发送请求获取数据。...那你在项目中有没有使用过缓存技术?比如Redis? **应聘者**:有,我们在一个高并发的订单系统中引入了Redis作为缓存层。...后来我们采用了本地缓存+Redis的混合方案,加上合理的TTL设置,效果提升了不少。 ## 面试官:你说得对,缓存设计非常关键。那你在微服务架构中有没有使用过Spring Cloud?

    18000
    领券