首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一种关于缓存数据何时更新的解决思路

为什么写? 和大家一样,有每天逛逛博客园的习惯,今天在博客园看到了“一只攻城狮”写的《初 Asp.net MVC 数据库依赖缓存那些事儿》。...,就是使用ajax请求的方式服务端请求一段下拉表的数据。   ...当然,这样的话还是要频繁的向数据库进行请求,那不是背离了我们原本使用缓存优化的目的了吗?   ...客户端需要使用缓存数据向服务端索要数据版本号(也就是数据上次的更新时间),如果该数据版本号与客户端缓存的数据版本号一致,那么,客户端缓存的数据安全可用的,如果不一致,那么说明数据已经更新了,客户端把新的版本号缓存下来并重新获取...第四步,重新获取数据 ? 重新获取数据,就不用携带版本号了,客户端在第三步已经获取并缓存下来了。

1.4K60

产品数据分析,重点是数据还是分析?

那到如何进行产品数据分析?将结合近一年的产品数据分析的工作,详细谈一下对这块的理解,并用实际工作的案例介绍如何进行产品数据分析。 ? 1. 为什么这样一个标题? ?...文章以实际工作中遇到的案例进行解释,为什么觉得比起数据,分析更为重要。 实习生:与非拼接原生页相比,拼接原生页点击率差异很小,但转化率明显降低。 :看到这个数据,你有什么想法?...:那你有没有想一下,为什么出现这种情况?映射到产品上,是不是功能设计有什么问题?我们该怎么办? 实习生:接下来该怎么做?...那在过程3中,就需要明确,用户行为与产品功能模块的对应关系,为什么产品功能导致用户上述的行为? 过程4:我们该怎么办? 到了过程4,是不是看起来很熟悉?...但至于为什么不好,单纯的看转化率一个指标是很难看出来结果的,通常这个时候就需要结合多个指标一起看。 继续上面的例子,用户在页面转化率低,是因为页面内容太复杂影响了用户信息获取,进一步影响用户浏览时长?

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

奇怪,Spring Security 登录成功后总是获取不到登录用户信息?

都返回 null,意味着系统收到当前请求并不知道你已经登录了(因为你没有在系统中留下任何有效信息),这会带来两个问题: 无法获取当前登录用户信息。 当你发送任何请求,系统都会给你返回 401。...2.顺藤摸瓜 要弄明白这个问题,我们就得明白 Spring Security 中的用户信息到底是在哪里存的? 前面说了两种数据获取方式,但是这两种数据获取方式,获取到的数据又是哪里来的?...这样就带来一个问题,当不同的请求进入到服务端之后,由不同的 thread 去处理,按理说后面的请求就可能无法获取到登录请求的线程存入的数据,例如登录请求在线程 A 中将登录用户信息存入 ThreadLocal...3.问题解决 经过上面的分析之后,我们再来回顾一下为什么会发生登录之后无法获取当前用户信息这样的事情?...「当前请求自己没走过滤器链。」 什么时候会发生这个问题?有的小伙伴可能在配置 SecurityConfig#configure(WebSecurity) 方法忽略掉一个重要的点。

8K61

Hooks + TS 搭建一个任务管理系统(一)-- 登录注册页面

因此我们想在这里抽象出两个 custom hook ,一个用来获取数据一个用来处理异步请求,写这两个之前,我们先写一个专门用来发送请求的文件,我们将我们关于登录注册的请求全部写在这个文件当中,再暴露出去...login 就会返回这个 fetch 能够发送登录的请求,当成功返回结果,就会调用前面的函数来设置一个本地的 token 值,用来保存用户的登录状态 这里有个比较重要的点:由于我们的请求都是异步的因此我们在...函数用来专门处理异步请求 四、编写 useAsync 发送异步请求 我们已经能够发送请求获取登录信息了,为什么我们还需要再编写一个这样的 custom hook ?...dispatch(...args) : void 0), [dispatch, mountedRef]) } 当我们使用这个 hook ,将会接收到当前组件的状态,当组件被卸载后,我们就不需要再将数据返回了...custom hook 返回的值是一个函数,我们最好用 useCallback 来包一下,这样能解决无限循环的问题 在我们的请求当中需要对异步情况做出特别的处理,利用 async 来解决这些问题 对于数据的类型

1.3K11

关于CSRF漏洞的一次有趣的交互

和客户同步了相关情况后,客户提出了新的疑问: 这里重新使用Google浏览器进行了测试,打开F12查看数据流观察一下: 这里我们发现,当我们去轻轻的点击了我们构造的测试链接,浏览器发了四个请求:...当我正准备提交测试结果,并说明无法复现的时候,老大叫到了说:“这不是CSRF可以删除吗?你为什么删不掉”,过去瞅了一眼,确实执行并成功删除了,这接口看眼缘?...Chrome 51开始,浏览器的Cookie新增加了一个SameSite属性,用来防止CSRF攻击和用户追踪,该设置当前默认是关闭的,但在Chrome 80之后,该功能默认已开启。...换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。但是这种情况用户体验不太友好。...小结 这篇文章从一次csrf失败的复现引出浏览器安全机制等一系列有趣的事,同时通过这件事也让发现了自身存在的一些问题,比如不够细节,考虑问题没有更多方面去考虑。思维不够发散,只停留在问题本身等等。

45120

吐血输出:2万字长文带你细细盘点五种负载均衡策略。

如上图所示,假设0,1,2号服务器都存储的有用户信息,那么当我们需要获取用户信息,因为我们不知道该用户信息存放在哪一台服务器中,所以需要分别查询0,1,2号服务器。...这样获取数据的效率是极低的。      对于这样的场景,我们可以引入哈希算法。      还是上面的场景,但前提是每一台服务器存放用户信息是根据某一种哈希算法存放的。...所以用户号100的这个请求最终会被1号服务器接收并处理。      这样就解决了无效查询的问题。      但是这样的方案带来什么问题?      扩容或者缩容导致大量的数据迁移。...最少也影响百分之50的数据。      为了说明问题,我们加入一台服务器3。服务器的数量n就从3变成了4。还是查询用户号为100的用户信息,100 mod 4结果为0。...一致性哈希算法带来了什么问题?      当节点很少的时候可能会出现这样的分布情况,A服务承担大部分请求。这种情况就叫做数据倾斜。      怎么解决数据倾斜?加入虚拟节点。

56500

别再错了,数字化转型与数据和应用程序无关,而与流程有关

对于那些似乎超出了范围的数据,还有额外的列。当我问“你真的需要这个字段吗?它似乎与赞助没有任何关系”,他们回答说:“想不是,但我通常会在其他应用程序中为一个组织收集这些数据,而赞助商就是组织。”...它有助于让 UI 专家、数据库管理员等承担项目,而不是每个项目都需要有全栈开发人员。 问题是,很多人倾向于数据层开始,然后数据层开始构建。相反,如果我们逻辑层开始?...5 高级用户经常犯类似的错误 高级用户,或者公民开发人员,如果你愿意的话,也遭遇“拥有一个锤子,所以一切都是钉子”的问题。...6 当我们做的时候,首先应是流程自动化,其次是活动自动化 流程逻辑会考虑流程决策,比如将请求路由到哪里、应该获取哪些信息以做出决策、如果请求被批准 / 拒绝会发生什么,等等。...这因任务和用户而异。表单或任何用户体验都应该适应用户当前的需求,而不是他们将要接触的数据。 表单可以获取和发布数据,但表单是用于任务的。活动,它们代表动词,而不是名词。是方法,而不是对象。

30940

吐血输出:2万字长文带你细细盘点五种负载均衡策略。

如上图所示,假设0,1,2号服务器都存储的有用户信息,那么当我们需要获取用户信息,因为我们不知道该用户信息存放在哪一台服务器中,所以需要分别查询0,1,2号服务器。这样获取数据的效率是极低的。...这样就解决了无效查询的问题。 但是这样的方案带来什么问题? 扩容或者缩容导致大量的数据迁移。最少也影响百分之50的数据。 ? 为了说明问题,我们加入一台服务器3。...所以扩容通常采用翻倍扩容,避免数据映射全部被打乱,导致全量迁移的情况,这样只会发生50%的数据迁移。 假设这是一个缓存服务,数据的迁移导致在迁移的时间段内,有缓存是失效的。 缓存失效,可怕啊。...那它是怎么解决服务器的扩容或收缩导致大量的数据迁移的? 看一下当我们使用一致性哈希算法,加入服务器会发什么事情。 ?...一致性哈希算法带来了什么问题? ? 当节点很少的时候可能会出现这样的分布情况,A服务承担大部分请求。这种情况就叫做数据倾斜。 怎么解决数据倾斜?加入虚拟节点。 怎么去理解这个虚拟节点

46220

Web Service监控教程:如何识别不良部署

然后你却必须一直处理用户的抱怨:为什么你们的系统总是报错? ? 我们最近正在两个数据中心之间迁移一些系统服务,甚至把一些组件放到了公有云上面。...失败的监控:当你的终端用户成了你系统的预警系统 当我得知一个同时无法使用 dynaTrace AJAX Edition服务器分析一个特定网站的性能的时候,先复制了这个网站的地址去验证问题是否存在。...如何才能确认你当前的监控方式是否奏效?开始仔细的分析用户报告的问题吧,虽然这样的话就是人工监控了。 然后跟工程师了解下是否用到了这里提到的有监控机制的框架。...你可以发现确认这个问题的根源是多么容易,可是为什么网络服务器的日志系统就是获取不到这个日志信息。 ?...业务人员:如果你的业务需要这些网络服务,确保你获取到了相关的监控这些服务的正常运行的面板,用户数据比如失败或者成功请求的数量。可能话,就分析下为什么请求失败。

1.2K20

Servlet第四篇【request对象常用方法、应用】

比如:现在有海贼王最新的资源,想要看海贼王的要在的网页上看。现在别的网站的人看到我有海贼王的资源,想要把的资源粘贴在他自己的网站上。这样独家的资源就被一个CTRL+C和CTRL+V抢走了?...其他的人可以通过复制粘贴的地址,放到它们的网页上 ? 这样就划不来啦【的广告你来没看!】。想要看我的资源,就必须经过的首页点进去看。...想要实现这样的效果,就要获取Referer这个消息头,判断Referer是不是的首页来的。如果不是的首页来的,跳转回的首页。...这是为什么明明已经把编码设置成UTF-8了,按照post方式,乱码问题已经解决了!。我们来看看get和post方式的区别在哪?...为什么post方式设置了request编码就可以解决乱码问题,而get方式不能。 首先我们来看一下post方法是怎么进行参数传递的。

1.1K50

token身份认证机制(token怎么获取)

3 Session session 字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四?对方肯定有某种特征(长相等)表明他就是张三。...这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session丢失。...4.2 基于服务器验证方式暴露的一些问题 Seesions:每次认证用户发起请求,服务器需要去创建一个记录来存储信息。当越来越多的用户请求,内存的开销也不断增加。...可扩展性:由于sessions 存放在服务器内存中,伴随而来的是可扩展性问题当我们想要增加服务器来解决负载问题,session 里的关键性信息限制我们的扩展。...CORS (跨域资源共享):当我们扩展应用程序,让数据能够从不同设备上访问,跨域资源的共享会是一个让人头疼的问题

5K10

女票竟然问我什么是同步、异步、阻塞、非阻塞?

女票是一个爱问问题的人,最喜欢没事问计算机方面的,尽管她是一名数学教师,尽管她学过计算机编程;但是认为她啥都不会,有时候在烦躁的问我,我会冲她发脾气,这里,认认真真(当面)跟女票道个歉,她纯粹是想帮我分忧解难...整体的流程就是:内核磁盘读数据进入内核缓存区;然后再把数据拷贝到用户缓存区;整个流程都处于阻塞状态中,必须一致进行下去,拿到结果才算完成一个请求。...主页术语区别:数据内核拷贝到空户空间是否由用户线程来完成的 3 什么又是并行和并发?...言外之意:并发描述某个时间段,并行描述某个时间点 并行:当我们的cup是多核,就能出现一个cpu在执行一个线程的同时,另外一个cpu可以执行另一个线程,它们两个相互不争抢cpu资源,在同一刻,可以同时执行多种任务...image.png 举例: 早上去公司吃早餐:早餐有小米粥、包子、豆浆、炒面,在规定的时间内,一喝口粥、一吃口包子、再一吃口炒面,就这样来来回回的切换吃完了早餐 - 并发 吃早餐发现你旁边同事跟你在同时吃早餐

59920

如何调优了令人抓狂的 首字节传输时间 (TTFB)

一段时间以来,一直在请求使用过两个独立的中间件函数(或边缘函数):一个用于的简报提供商那里获取最新订阅者数量,另一个用于 Twitch API 获取最新的流媒体视频或正在进行的当前直播流的最新缩略图...通过一个小小的改动,所有核心网页生命力指标也得到了改善。 服务器端移动数据抓取到客户端的问题 下一步是删除获取 Twitch 数据的 Edge 函数。...由于中间件不再拦截 HTTP 请求,TTFB 将会降低,用户将更快地在浏览器中看到内容。 服务器端将数据抓取移动到客户端的问题 下一步是删除获取 Twitch 数据的 Edge 函数。...由于中间件不再拦截 HTTP 请求,TTFB 降低,用户将更快地在浏览器中看到内容。 然而,这种方法也存在一些问题: 将 Twitch 数据抓取服务器端移动到客户端的实现方式需要仔细斟酌。...现在,使用 Twitch 视频播放器嵌入代码来显示当前直播流,而不是在请求 Twitch API 获取最新直播流信息。这样额外的加载一些客户端 JavaScript 到页面中,这是它的缺点。

23610

这玩意比ThreadLocal叼多了,吓得why哥赶紧分享出来。

调用 currentProxy 方法,就是 ThreadLocal 里面获取当前类的代理类。 那他是怎么放进去的高冷的第二句是这样说的: ? 对应的代码位置如下: ?...使用方法非常简单,官网上截个图: ? 这里它为什么说:紧跟着的第一个 select 方法会被分页。 或者说:什么情况下导致不安全的分页?...为什么说理论上? int 的取值范围是 [-2147483648 到 2147483647]。...他是这样说的: ? 他的意思就是说: 哥们,你这个东西怎么觉得是 Netty 那边弄过来的?本着开源的精神,你直接弄过来是没有问题的,但是你至少得按照规矩办事吧?得遵循 AL2 协议来。...而且甚至看到你在你的 pr 里面提到了 Netty 。 至于这个 AL2 到底是什么,是没有看明白的。 但是不重要,就把它理解为一个给开源社区贡献代码需要遵守的一个协议吧。

45130

Dubbo一致性哈希负载均衡的源码和Bug,了解一下?

如上图所示,假设0,1,2号服务器都存储的有用户信息,那么当我们需要获取用户信息,因为我们不知道该用户信息存放在哪一台服务器中,所以需要分别查询0,1,2号服务器。这样获取数据的效率是极低的。...这样就解决了无效查询的问题。 但是这样的方案带来什么问题? 扩容或者缩容导致大量的数据迁移。最少也影响百分之50的数据。 ? 为了说明问题,我们加入一台服务器3。...那它是怎么解决服务器的扩容或收缩导致大量的数据迁移的? 看一下当我们使用一致性哈希算法,加入服务器会发什么事情。 ?...一致性哈希算法带来了什么问题? ? 当节点很少的时候可能会出现这样的分布情况,A服务承担大部分请求。这种情况就叫做数据倾斜。 怎么解决数据倾斜?加入虚拟节点。 怎么去理解这个虚拟节点?...但是这样的需求未免有点太牵强了,适用场景略小。 直到有天晚上,睡觉之前,电光火石之间突然想到了一个稍微适用的场景了。当时的情况大概是这样的。 ? 如果需求是需要保证某一类请求必须顺序处理

73910

抢了个票,还以为发现了12306的系统BUG

同一乘车人,同一行程,同一间段 12306在很久以前,对购票和乘车规则是有限制的,当同一乘车人的两张车票涉及的行程出现冲突拒绝购票请求。...仔细想来,购票业务的真实场景非常复杂,单是任何区间段购票这一个场景,就涉及到了好多的问题,要兼顾不同区间段的旅客数量,分配不同的席位库存。...,比如按5分钟分段,将用户购买的车次对应的区间耗时段置为1 : 当我们希望获取用户的行程真实时间段,只需要用出发时间加上对应的占用时间段耗时时长,即可。...这样,可以保证所有区间所挂席位集合,每次获取的第一个席位都是同一个,可以最大努力的保证最长行程可以被优先分配。 我们每次订区间票的时候应该都有体会,从这站订没有票,但是靠近始发地多定几站就有票了。...区间冲突幂等控制 回到文章开头的问题,如果要求同一乘车人,在 同一间段车次不冲突 、不同车次行程不冲突,幂等的角度来看,就需要根据 乘车人、行程区间 两个属性做幂等控制。 那么幂等应该怎么做

65760

为被动扫描器量身打造一款爬虫 —LSpider

结果去重 到目前为止,我们至少触发了属于页面中大量的请求,接下来我们就遇到了一个问题,如何对流量去重?...除了尽可能的触发请求以外,爬虫也并不是单一执行流程的,每个爬虫需要不断地某个主控(RabbitMQ)获取新的目标,而爬虫也需要不断地返回目标,但我们就需要去重逻辑来完成新目标的处理,这样可以最大限度的减少无意义的请求...这样一来,我们爬虫主控与数据处理的部分分离开来,两个部分都只需要负责自己的任务即可。爬虫线程可以直接监听RabbitMQ来获取任务。...当我们收到了需要登录页面的推送,我们又遇到了新的问题,假设任务列表已经陆陆续续储存了几十万条请求当我们完成了账号的注册和登录,并将cookie设置好后,这个任务被重新加入到队列的尾,等到任务再次跑到时...在从队列中获取数据的时候,RabbitMQ优先取出优先级更高的消息。 这里我们直接新建一个单独的线程和队列来轮询检查登录状态。一旦满足登录成功,那么该任务就会以高优先级的权重被加入到主队列中。

99220

人人都在用,但你却不知道它背后发生了什么——浏览器的工作原理:浏览器幕后揭秘

,所以当一个页面或者插件崩溃,影响到的仅仅是当前的页面进程或者插件进程,并不会影响到浏览器和其他页面,这就完美地解决了页面或者插件的崩溃导致整个浏览器崩溃,也就是不稳定的问题。...所以当我们再在 Chrome 中运行上面那个死循环的脚本,没有响应的仅仅是当前的页面。...有人为什么跑到一个进程里面?...当然浏览器还提供了 DNS 数据缓存服务,如果某个域名已经解析过了,那么浏览器缓存解析的结果,以供下次查询直接使用,这样减少一次网络请求。 拿到 IP 之后,接下来就需要获取端口号了。...宏观视角去看HTTP请求流程,有了一个整体框架,接下来就是一步步的分析提出问题,带着疑惑去学习,抓住问题的本质,比如深入的了解TCP如何连接的,这样子何尝不是一种学习方法?

84820

session与cookie详解

为什么会用到session与cookie? 根据上述的例子,我们知道session与cookie是可以干什么的了,那为什么必须用这个来实现?这里就有必要了解一下http应用传输协议的特点了。...Cookie cookie的基本概念 cookie是远程浏览器存储数据以此追踪用户和识别用户的的机制,从实现来说,cookie是存储在客户端上的一个数据片段。....浏览器针对不同的域,在磁盘的对应目录创建一个单独的文件,来存储该域下面的cookie值. 2.内存存储.当浏览器关闭,该cookie随之消失.根据下面的创建语法,当我们未设置过期时间则会出现这种情况...$expire:cookie的过期时间,秒为单位,当该值被设置,定时删除;当该值没有设置,该值是永久有效的.该值设置为小于当前时间,会出发浏览器的删除机制,自动删除cookie....由于cookie与session是相互关联的,获取到cookie一定程度上获取到了session,同样可以操作session. .cookie与session是不是在浏览器关闭的时候消失?

59720

使用websocket开发一个音乐聊天室

为什么做 工作中经常看到别人使用和接触websocket、但是自己的工作又用不上、于是便想着做一个个人项目来学习websocket、恰巧看到了一个用websocket打造的音乐聊天室项目、于是便从零开始开发了这样一个音乐聊天室大厅...DB项目的源码里面已经绑定了一个数据库了,这里使用的是mysql,这些都大同小异了,我们不需要过多关注,我们来大致分析一下一个用户发送消息后需要做哪些事情。...,然后开始记录,记录当前的歌曲,然后当前歌曲的时间,当前歌曲的资源地址等等,用户进入房间就推送给用户,但是用户进入房间的时候怎么知道当前是多少秒,所以,我们数据库拿到歌曲的时候需要记录一个时间戳timespace...,如何实现,歌曲的搜索同样需要使用爬虫,进行搜索歌曲,搜索到歌曲之后,用户点歌会把当前歌曲id和发送给服务端,服务端记录谁点了什么歌,当然,我们也需要有先来后到之分,所以我们需要维护一个队列,按照顺序依次加入点歌用户的歌曲...,这个时候,自动切歌就不会去数据库读取了,大致流程是,查看队列有没有用户点的歌曲,没有在数据库随机获取一个,有的话拿到队列第一首歌曲,然后切歌,再移除掉队列的歌曲,就实现了点歌自动播放了。

1.6K30
领券