简单地说,我们现在是Redis

了解更多

缓存与会话存储



回到博客

俗话说:“在硅谷,你朝任何方向扔一块石头,都有可能砸到软件工程师。”万博电竞客服有一天,我坐火车从圣何塞到旧金山,无意中听到两个软件工程师在比较他们正在开发的产品的速度。万博电竞客服当我听到一个开发人员说,“我们的应用运行得很快,因为我们缓存了所有的会话数据。”我意识到,即使是硅谷的工程师也可能没有意识到缓存和会话存储之间的细微差别。Redis,作为一个内存数据库,用于缓存和会话存储场景。让我们看看用例的不同之处。

缓存

应用程序将数据存储在缓存中,以更快地服务于未来的请求。通常,高速缓存存储位于RAM中,具有亚毫秒的延迟。

在数据获取生命周期中,应用程序首先在缓存中查找数据。如果有一个命中(即数据在缓存中),它立即提供数据。相反,如果数据丢失,它将从永久存储中获取数据,在缓存中存储一份副本,并将数据提供给消费者。对于所有未来的请求,数据已经存在于缓存中,并且服务速度更快。当应用程序更新数据时,它同时更新缓存和永久存储。

这种生命周期适用于不同的使用者在一段时间内请求相同数据的场景。还应该注意的是,数据存储在应用程序级别,而不是用户级别。存储在缓存中的数据在用户之间共享。图像、视频、静态HTML页面、JavaScript库和样式表都是经常存储在缓存中的数据。

会话存储

面向会话的应用程序(例如web应用程序)在用户登录时启动会话,并在用户退出或会话超时前处于活动状态。在此期间,应用程序将所有与会话相关的数据存储在主内存或会话存储(应用程序宕机时不会丢失数据的数据库)中。会话数据可能包括用户资料信息、消息、个性化数据和主题、推荐、有针对性的促销和折扣等。

图1所示。缓存vs会话存储

下面几点对比会话存储从缓存:

  1. 在会话存储中,数据不会在不同用户的会话之间共享。解决方案体系结构必须确保用户之间的数据保持隔离。
  2. 如上图所述,数据的生命周期在缓存和会话存储之间是不同的。图中显示了一个透写缓存,它同时写入缓存和后端数据存储。这降低了写操作的吞吐量。另一方面,会话存储依赖于对内存数据库的读写数据。他们不能为写操作牺牲性能。
  3. 会话存储数据不是短暂的;这是现场直播时唯一的真相来源。因此,需要满足真实数据库的数据持久性要求。如果缓存中的数据丢失了,在永久存储中总会有一个副本。
  4. 会话存储需要复制、高可用性和数据持久性,以确保事务性数据不会丢失。然而,缓存的高可用性需求是由操作需求和防止缓存混乱的需求驱动的。

用Redis Enterprise设计缓存和会话存储万博体育彩

万博体育彩Redis Enterprise是一个流行的数据库,对于缓存和会话存储都是理想的,提供缓存和会话存储场景所需的高可用性,以及会话存储与内存复制所需的持久性。可以使用Redis Enterprise作万博体育彩为缓存和会话存储在单一设置,如下图所示。

图2。用Redis Enterprise设计缓存和会话存储万博体育彩

在这种设计中,应用层访问和维护缓存中的数据。因此,在应用程序中运行的所有会话都将访问存储在缓存中的相同数据。

除了缓存中的数据,Redis Enterprise中每个会话都保存着与会话相关的数据。万博体育彩如何确保会话不会访问彼此的数据?这里有一个解决方案:首先,每个会话必须获得一个不与其他会话共享的随机会话id。第二,会话必须将会话id附加到密钥。在下面的示例中,会话将个人信息存储在Hash数据结构中,用户建议存储在Set数据结构中。您可能会注意到,密钥中有会话ID。这将防止会话访问其他会话拥有的数据。

session_data: (session_id): personal_info
姓名——约翰·史密斯
电子邮件:john@smith.com
电话- 987-111-1111

session_data: (session_id):建议
{“产品a”“产品b”“产品c”,.....“产品n”}

总之,缓存和会话存储是两个不同的用例。虽然高可用性对缓存非常重要,可以防止缓存拥挤等情况,但会话存储需要高可用性和持久性,以支持事务性数据和不间断的用户参与。通过适当的架构和设计,Redis Enterprise的单个数据库实例可以用于缓存和会话数据用例,同时确保会话之间的数据分离。万博体育彩

Baidu