早上跟面试阿里云的学长沟通了一下,其中一个面试题如下(不一定是标准答案,只是按照我的理解整理了一波)针对先删除缓存再更新数据库的情况: 
  使用延时双删: 
    基本思路: 在写库前后都进行删除缓存操作,并且设置合理的超时时间基本步骤: 先删除缓存–再写数据库—休眠一段时间—再次删除缓存注:休眠的时间是根据自己的项目的读数据业务逻辑的耗时来确定的。这样做主要是为了保证在写请求之前确保读请求结            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-04 12:16:18
                            
                                81阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            应用场景1)7天自动收货  a、用户支付完成以后,把订单ID插入到内存的一个DelayQueue中,同时插入到Redis中。  b、7天之内,用户点击了确认收货,则从DelayQueue中删除,从Redis中删除。  c、超过7天,DelayQueue中的订单ID出队,查询数据库,改状态为自动收货,删除redis。  d、如果7天之内,web服务器重启过,则web服务器启动以后,从redis中读取            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-20 21:01:41
                            
                                116阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # Java中的延时双删机制
在Java中,缓存是一种常见的优化机制。为了提高性能,很多应用会使用缓存来避免频繁地从数据库中读取数据。但是,由于缓存存在不一致性的问题,特别是在更新数据的时候,如何有效地管理缓存便显得尤为重要。延时双删(Delayed Double Delete)是一种常用的策略,用于解决在更新或删除数据时,缓存与数据库之间的不一致性。
## 延时双删的基本原理
延时双删的基            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-08-05 06:02:27
                            
                                119阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            文章目录前言一、数据库、缓存双写问题1.先删除缓存再更新数据库2.先更新数据库再删除缓存二、解决方案1.延时双删2.消息队列总结 前言今天要写的是缓存之双写一致性问题(双写一致是指:缓存与数据库写入保持一致。),什么情况下会产生双写一致性问题,以及解决问题的方案。一、数据库、缓存双写问题1.先删除缓存再更新数据库在缓存删除之后,数据库更新之前的间隙,又有人读取旧数据更新了缓存,数据库更新完数据库            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-01 10:22:57
                            
                                141阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            redis与数据库双写一致问题: 策略: 1:先更新数据库,再更新缓存 ------不推荐,并发访问情况下出现脏数据的可能性较大 2:先删缓存,再更新数据库 --------延时双删策略,休眠一秒再淘汰可能出现的脏数据(第二次删除可使用异步操作保证原有吞吐量,异步操作第二次删除失败,建立重试操作) 3:先更新数据库,再更新缓存 ------同样会出现脏数据的情况,一样的做延时删除策略和删除失败的重            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-02 11:13:41
                            
                                76阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            如何手写redis客户端 知道结构set100万数据只需要3秒钟,如何做到‘ pipeline,批量情况才使用。实时性要求不高的场景使用pipeline两行代码调用分布式锁数据库和redis一致性是要实时一致性还是最终一致性 不更新数据,先删除再新增才快。 延时时间根据业务来设置,延时双删解决先删缓存,再删数据库如何找到redis热点数据把key操作了多少次记录下来。 放到代理层,监听,然后统计。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-17 21:04:05
                            
                                183阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # Java延时双删
## 简介
在Java编程中,我们经常会遇到需要延时执行某些操作的情况。延时双删是一种常见的在延时操作中可能会遇到的问题,即数据在延时执行前被删除了,造成了数据的丢失。在本文中,我们将介绍什么是延时双删问题,以及如何避免这个问题的发生。
## 什么是延时双删问题
延时双删问题指的是在进行延时操作时,数据在延时执行前被删除了。这种情况通常发生在多线程环境下,其中一个线程            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-02-26 04:46:56
                            
                                198阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在当前环境下,通常我们会首选redis缓存来减轻我们数据库访问压力。但是也会遇到以下这种情况:大量用户来访问我们系统,首先会去查询缓存, 如果缓存中没有数据,则去查询数据库,然后更新数据到缓存中,并且如果数据库中的数据发生了改变则需要同步到redis中,同步过程中需要保证 MySQL与redis数据一致性问题,在这个同步过程中出现短暂的数据延迟也是正常现象,但是最终需要保证mysql与缓存中的一致            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-10 10:15:55
                            
                                335阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # 如何实现"java 延时双删问题"
## 整体流程
首先,让我们通过一个表格展示整个流程:
| 步骤 | 操作               |
|------|---------------------|
| 1    | 用户点击删除按钮   |
| 2    | 弹出确认删除对话框 |
| 3    | 用户再次点击删除按钮 |
| 4    | 执行删除操作        |
##            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-03-04 04:22:49
                            
                                54阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Java双缓冲技术  Java的强大特性让其在游戏编程和多媒体动画处理方面也毫不逊色。在Java游戏编程和动画编程中最常见的就是对于屏幕闪烁的处理。本文从J2SE的一个再现了屏幕闪烁的Java Appilication简单动画实例展开,对屏幕闪烁的原因进行了分析,找出了闪烁成因的关键:update(Graphics g)函数对于前端屏幕的清屏。由此引出消除闪烁的方法——双缓冲。双缓冲是计算机动画处            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-15 11:34:58
                            
                                52阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            说明:(1)为什么写了本篇博客?:在【34:第三章:开发通行证服务:17:双写数据不一致性问题;利用缓存双删策略,实现MySQL和Redis数据的最终一致性】中,缓存双删的时候,第二删我们采用了延时的做法;本篇博客就来解释下为什么要延时;目录一:参考文章1;二:参考文章2;一:参考文章1;结合  【34:第三章:开发通行证服务:17】中的疑问与解答中的疑问3,还是能多少感觉到其            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-19 22:53:59
                            
                                135阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            最近有跟一些面试官谈到数据库与缓存一致性的问题,感觉每个人好像看法都不同,所以这里写一些自己的看法,不一定完全正确,但是有助于思考。另外吐槽下当前八股成风的氛围,中国这么多年来,很多技术被外国卡脖子不是没有原因的,雪崩之下,没有一片雪花是无辜的,内卷之下,每个技术人员都是始作俑者。废话不多说,上菜…不是,上干货。说到数据库与缓存一致性,目前我所知道的两种比较适合作为面试答案的方法分别是:延迟双删            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-24 12:22:40
                            
                                108阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、为什么不直接更新缓存?无论写数据库和写缓存,哪个操作在前,都不要更新缓存;因为更新数据库和更新缓存是两个独立的阶段,并发场景下不同线程的两个阶段,可能发生交叉,最终导致数据库和缓存长时间不一致,这种长时间的不一致是不能容忍的。不一致时长:缓存过期时间,或下一次更新。二、如何理解Cache Aside Pattern?这是一种公认的经典缓存一致性处理模式,采用先写库,再删缓存的操作。这种无锁的方            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-20 18:23:16
                            
                                128阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            前言:RabbitMQ中间件的引入对于整个系统来说是一把双刃剑,在对系统进行解耦的同时也降低了消息的可靠性,但是对于某些系统来说我们又必须保证我们的消息是不会丢失的,因此rabbitmq给提供了以下一些功能来保证消息的可靠性,本文我们主要讲解消息可靠性中的 发送端确认机制 以及 消费端确认机制。1.发送端确认机制: 2.1 ConfirmCallback方法 ConfirmCallbac            
                
         
            
            
            
            先更数据库,再删除缓存问题缓存删除后,尚未更新数据库,并发读请求,从数据库读到了旧值,并且更新到缓存导致后续请求都是旧值。 时间 从上    到下, 越来 越晚更新操作 删除redis读取操作 缓存没有数据 从数据库读到旧值 回写redis更新mysql返回返回 解决方式经典的延迟双删。就是:先更新数据线,再            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-18 11:33:34
                            
                                64阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、什么是 Redis 延时双删?1、延迟双删策略是分布式系统中数据库存储和缓存数据保持一致性的常用策略,但它不是强一致。不管哪种方案,都无法绝对避免Redis存在脏数据的问题,只能减轻这个问题2、因为双删策略执行的结果是把redis中保存的那条数据删除了,以后的查询就都会去查询数据库。经常修改的数据表不适合使用redis缓存3、Redis适用的是读频率远远大于改频率的数据表,不适合改频率大于读频            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-26 14:38:57
                            
                                409阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1、前言我们在实际项目中经常会使用到Redis缓存用来缓解数据库压力,但是当更新数据库时,如何保证缓存及数据库一致性,一般我们采用延时双删策略。目前系统中常用的做法是一个查询接口,先查询Redis,如果不存在则查询数据库,并将结果放入到Redis中。为什么是删除缓存,而不是更新缓存呢?主要是如果缓存的内容是带有树型结构或者List,Map,那么更新其中一个内容相对较慢。本文所讲操作,均是按照如果缓            
                
         
            
            
            
            目录1、使用了复杂度高的命令2、存储大key3、集中过期4、实例内存达到上限5、fork耗时严重6、绑定CPU7、开启AOF8、使用Swap9、网卡负载过高Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用Redis时,经常时不时会出现访问延迟很大的情况,如果你不知道Redis的内部实现原理,在排查问题时就会一头雾水。很多时候,Redis出现访问延迟变大,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-12 23:40:21
                            
                                94阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一.大纲二.缓存2.1 缓存穿透案例:根据id查询文章缓存穿透:当查询一个不存在的数据,mysql查询不到数据,也不会写入缓存,就会导致每次查询时候都会去查数据库。如果当黑客知道了请求的链路,一直用不存在的id去查询数据,就会可能导致数据库的压力增大,导致宕机。解决方案:解决方案描述优点缺点缓存空数据缓存空数据,查询返回的数据为空,也存在缓存中去简单1.当存在大量空数据的时候,会消耗内存;2.当原            
                
         
            
            
            
            # Redis的延时双删策略及其使用场景
在微服务架构或高并发应用中,缓存与数据库的协作至关重要。Redis作为一个优秀的内存数据库,常用于数据的缓存以提高系统性能。然而,如何有效地保证缓存与数据库的一致性是一个棘手的问题。延时双删技术可以帮助我们解决这一问题。本文将详细介绍延时双删的使用场景、原理及代码示例。
## 什么是延时双删?
延时双删是一种解决缓存与数据库不一致的策略,主要适用于以            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-10-25 05:34:12
                            
                                594阅读