整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

微软应用商店出现“检索信息”错误,卡用户数小时无法下载应用

T之家 5 月 14 日消息,科技媒体 Windows Report 近日发布博文,表示微软应用商店(Microsoft Store)近日出现“正在检索信息”(Retrieving information)错误,导致用户无法下载任意内容。

用户反馈打开微软应用商店并尝试安装应用时,页面会跳出“正在从微软应用商店检索信息”,而且会持续数小时时间。

用户原本以为是电脑或者微软账号的问题,不过重新注销或者清除微软应用商店缓存,都无法解决这个问题。

IT之家援引该媒体报道,这个问题并非个例,在微软官方支持论坛上有很多用户反馈遇到了相同的问题,Xbox、Prime Video、Bluemail 和 Windows File Recovery 等应用都存在上述错误。


存数据的简介、用例、策略和政策

介绍

您是否注意到,如果您的互联网连接速度较慢并浏览网站,文本会先于任何高质量图像加载? 但是,在您随后访问同一网站时,您会发现页面渲染速度很快。 当您访问一个全新的网站时,加载时间比 Facebook 或亚马逊等经常访问的网站要长。 你知道为什么会发生这种情况吗? 答案是缓存。



上图是我的 Instagram 页面在网速较慢时的样子。 正如您所看到的,文本数据已显示,但您看不到图像,因为页面仍在渲染。

为用户提供最佳体验以提高保留率和参与度非常重要。 在当今竞争激烈的世界中,企业会因糟糕的用户体验而受到影响。 想象一下,您正在任何视频流网站上观看您最喜欢的电视剧,但视频一直在缓冲。 您会留下来并继续在这样的网站上订阅吗?

缓存的工作原理是“引用局部性”。 缓存充当数据的本地存储以加速查找或检索。 缓存的主要目标是减少读取延迟并提高任何应用程序的吞吐量。 让我们在下一节中看一下现实世界的类比。

现实世界中缓存的类比

假设你每天做饭。 您需要不同的食材、蔬菜、香料等来准备食物。 但你每天都去超市买这个吗? 那样的话就太麻烦、太费时间了。 因此,您首先检查厨房或冰箱,以防杂货堆积如山。 这样就可以避免去超市的麻烦了。



在这里,您的冰箱就像一个储藏室或当地的蔬菜商店。 使用缓存的最大好处是可以节省时间并且可以快速准备食物。

缓存如何工作?

后端应用程序通常将数据存储在数据库中。 当客户端获取任何数据时,应用程序会查询数据库,获取数据并将其返回给用户。 数据库服务器作为单独的进程运行,并且可以在与应用程序服务器不同的计算机上运行。

从数据库读取数据非常耗时,因为它需要网络调用和IO操作才能从文件系统获取数据。 如果数据存储在Cache中,读取操作将会非常快。 当客户端重复请求相同的数据时,从缓存中获取数据比从数据库中获取数据更有意义。

例如:如果一条推文变得病毒式传播,所有客户端都会尝试获取同一条推文的数据。 由于 Twitter 拥有数百万用户,因此使用缓存将节省数百万次对数据库的调用。

此外,缓存还可以减少数据库的负载。 如果在Cache中找到数据,就会节省数据库调用,从而减少数据库的压力。 简单来说,你可以把Cache想象成一个存储键值对的哈希表。

下图展示了从Cache中读取数据的过程:


缓存的核心概念

TTL(生存时间)

缓存中可以存储的数据量是有限制的。 清除缓存中应用程序服务器不再需要的条目至关重要。

对于 Netflix,服务器会将最常观看或热门的节目缓存在缓存中。 它不需要存储收视率随着时间的推移而减少的节目。

例如:缓存像《金钱抢劫》这样的电视节目(在撰写本文时)比缓存像《夺宝奇兵》这样的电影更有意义。

驱逐政策

缓存可能会在某个时间点变满,具体取决于应用程序访问数据的方式。 因此,我们需要想出一种策略,将数据从缓存中删除,并替换为将来更有可能被访问的数据。

缓存驱逐策略有多种,例如LRU(最近最少使用)、LFU(最近最少使用)、MRU(最近最少使用)。 这些策略使用预定义的逻辑从缓存中逐出数据。 我们将在下一节中讨论上述每一点。

LRU(最近最少使用)

此策略从缓存中删除最近最少使用的条目。 一旦缓存变满,最近最少使用的条目就会被逐出,而最近的条目将被添加到其中。

您可以想象 Facebook 将名人的照片存储在缓存中。 关注者的数据访问模式使得他们对最近的照片感兴趣。 当缓存已满时,它将踢出最近最少添加到其中的照片。

LFU(最不常用)

LFU 跟踪数据项被访问的频率或次数。 如果缓存大小超过给定阈值,它将逐出频率最低的条目。

当您在发短信时输入任何单词时,手机会开始建议您选择多个单词,而不是输入整个单词。 在内部,您的手机软件会保存您输入的所有单词及其频率的缓存。



高速缓存稍后会逐出频率最低的单词。 如果多个单词之间存在平局,则最近最少使用的单词将被逐出。 在上面的手机示例中,如果您开始使用“feature”、“features”、“feather”等词语,它将停止向您建议“feat”一词(因为该词将从缓存中清除)。

MRU(最近使用)

在 MRU 中,最近使用的条目将被删除,并优先考虑较旧的条目以保留在缓存中。 如果数据访问模式使得用户不太可能查看最近的条目,则使用此策略进行驱逐。 让我们看一个例子。


Tinder 等约会应用程序通常会缓存用户的所有潜在匹配项。 当用户向左或向右滑动个人资料时,应用程序不应再次向用户推荐相同的个人资料。 如果发生这种情况,将会导致用户体验不佳。

有必要驱逐最近观察到的条目。 应用程序必须删除向右或向左滑动的配置文件的缓存条目。

缓存类型

通过缓存写入

顾名思义,数据首先写入Cache,然后再写入数据库。 这样就保证了Cache中的数据和数据库中的数据的一致性。 缓存上完成的每次读取都遵循最近的写入操作。



然而,这种方法的缺点是应用程序写入延迟增加。 这种方法不适合写入量大的系统。 它对于在数据库中持久保存数据后频繁重新读取数据的应用程序非常有用。 写入延迟可能会受到影响,但可以通过较低的读取延迟和一致性来补偿。

回写缓存

从上面可以看出,通过缓存写入不适用于写入密集型系统,因为延迟可能会增加。 另一种方法是先将数据写入缓存并将数据标记为已修改(稍后在数据库中更新)。

异步作业可以定期读取缓存中所有修改的条目并更新数据库中相应的值。 这种方法既不会影响读取延迟,也不会影响写入延迟。 唯一的缺点是由于缓存和数据库之间的数据同步会存在延迟。 由于数据库是事实来源,任何从数据库读取的应用程序都会读取过时的条目。

YouTube 等网站使用写回缓存来存储任何视频的观看次数。 为病毒式视频的每个观看次数更新数据库的成本高昂。 将数据写入缓存,然后同步到DB中是一个更好的解决方案。 使用回写式缓存可确保低读/写延迟。

围绕缓存写入

很少有后端应用程序不经常重新读取最新数据。 在这种情况下,使用 Write around Cache。



在此策略中,更新数据库而不写入缓存。 这不会向缓存加载不会被重新读取的数据。 如果应用程序开始查询最新数据,则会导致缓存未命中。

分布式系统中使用的缓存示例

以下是开源内存缓存产品列表

  • Redis
  • Memcached
  • VoltDB
  • Aerospike DBS
  • Apache Ignite

一篇文章介绍的是《浏览器缓存机制》,浏览器缓存是浏览器保存数据用于快速读取或避免请求重复资源,提升网页加载速度。缓存的数据到底放哪了呢?作为开发者,有时也需要检查一下缓存中的内容。所以介绍下缓存方法以及缓存内容在哪查找?

1、http 缓存

http缓存是存在于服务器与浏览器之间,是一种保存资源副本并在下次请求时直接使用该副本的技术。web缓存发现请求资源已经被存储,它会拦截请求,返回资源副本,而不会去服务器重新请求资源。

具体的缓存设置,如何判断是否有缓存?等,上一篇文章以详细介绍,可点击《浏览器缓存机制》查看。

打开浏览器调试模式,在 Application 右侧就会有浏览器的 8 种缓存方式,具体如下:

2、websql

websql是较新的chrome浏览器支持,并以独立规范形式出现,引入了一组使用 SQL 操作客户端数据库的 APIs。websql主要特点:

  • Web Sql数据库 API 不是HTML5的一部分,在H5之前就已经存在了。
  • 将数据以数据库的形式存储在客户端,按需读取。
  • 数据便于检索,允许使用sql语句。
  • 可以使浏览器实现小型数据库存储功能。

websql常用的API如下:

openDatabase - 打开已存在的数据库,如果不存在,则会新建一个新的数据库。
transaction - 控制一个事物,以及这种情况执行提交或者回滚。
executeSql - 执行 SQL 语句。

3、indexDB

indexDB 是为了能够在客户端存储客观数量的结构化数据,并且在这些数据上使用索引进行高性能的检索。DOM存储对于少量数据是非常友好的,但不适合存储大量结构化数据,indexDB就是为了解决这个问题而生的。

indexDB 分别为同步和异步访问提供了单独的API,同步API本打算供Web Worker内部使用,但目前还未实现。异步API在Web Worker内部和外部都可以使用,另外浏览器对indexDB有50M大小限制。

indexDB主要特点有:

  • indexDB大小取决于你的硬盘,存储的数据量非常大。
  • 可以直接存储任何类型的数据,如 js任何类型的数据 、blob流。
  • 可以创建索引,提供高性能搜索功能。
  • 采用事务,保证数据的准确性和一致性。

4、cookie

cookie指的就是会话跟踪技术。一般指网站为了辨别用户身份,进行session跟踪而而存储在用户本地终端上的数据,cookie一般通过http请求头发送到服务器。cookie主要特点有:

  • 跨域限制,同一个域名下可多个网页内使用。
  • cookie可以设置有效期,超出有效期自动清除。
  • cookie存储大小在4K以内。
  • cookie的存储不能超过50个cookie。
  • 只能存储字符串类型。

cookie常用操作:

setMaxAge - 设置cookie的有效期,时间单位是秒,负值时表示关闭浏览器后就失效,默认值为-1。
setDomain - 用于指定,只有请求指定域名才会带上该cookie。
setPath - 只有访问该域名下的cookieDemo的这个路径地址才会带cookie。
setValue - 重置 value 。

5、localstorage

localStorage 是HTML5的一种新的本地缓存方案,目前使用比较多,一般存储ajax返回的数据,存储特点主要有:

  • 数据可以长久保存,没有有效期,直到手动删除为止。
  • 存储的数据量大,一般5M以内。
  • 存储的数据可以在同一个浏览器的多个窗口使用。
  • 存储的数据不会发送到服务器。

localStroage常用API如下:

localStorage.setItem(key,value) // 保存数据
localStorage.getItem(key) // 获取数据
localStorage.removeItem(key) // 删除单个数据
localStorage.clear() // 删除全部

6、sessionstorage

sessionStorage与上述localStroage类似,它的特点主要有:

  • 存储的数据在浏览器关闭后删除,与网页窗口具有相同的生命周期。
  • 可以存储的数据大小5M。
  • 存储的数据不会发送到服务器。

sessionStorage常用API如下:

sessionStorage.setItem(key,value) // 保存数据
sessionStorage.getItem(key) // 获取数据
sessionStorage.removeItem(key) // 删除单个数据
sessionStorage.clear() // 删除全部

7、application cache

application cache是离线缓存技术,将大部分的图片、js、css等资源放在mainfest文件配置中,页面打开时通过mainfest文件读取本地文件或请求服务器资源。通常用于静态页面的缓存。

application cache特点:

  • mainfest文件必须有变化时才会更新。
  • 一次必须更新mainfest文件中的所有文件才能生效。
  • 当网络断开时,可以继续访问页面。
  • 文件缓存到本地,不需要每次都从网络上请求。
  • 稳定性比较好,遇网络故障或服务器故障可以继续访问本地缓存。
  • 加载速度快,缓存资源为本地资源,因此加载速度较快。

8、cacheStorage

cacheStorage 表示 cache对象的存储。该接口提供 serviceWorker 或其他类型的工作线程或window范围访问的所有命名缓存的主目录。

CacheStorage常见方法:

  • CacheStorage.match() - 检查给定的 Request 对象是否是 CacheStorage 对象跟踪的 Cache 对象中的键,返回Promise
  • CacheStorage.has() - 返回一个 Promise,它解析为与 cacheName 相匹配的 Cache 对象。
  • CacheStorage.delete() - 删除cache对象
  • CacheStorage.keys() - 含有keys中字符串的任意一个,则返回一个promise对象。
  • cacheStorage.has() - 如果包含cache对象,则返回一个promise对象。

9、flash缓存

flash缓存也是页面通过js调用flash读写特定的磁盘目录,达到本地数据缓存的目的。这是要基于flash的,所以基本不用。