当前位置: 首页 > 知识库问答 >
问题:

在Redis缓存中存储多个版本的数据

卢骏俊
2023-03-14

我有一些需要在Redis缓存中存储多个版本的产品数据。数据是JSON序列化的。获取普通(基本)数据的过程是昂贵的,将其定制成不同版本的过程也是昂贵的,因此我希望缓存所有版本以尽可能优化。假设定制是基于一个参数的,我可以使用该参数作为缓存键的一部分。

我计划用于检索产品数据的过程如下所示:

if cache contains appropriately customised data for this parameter
    return customised data from cache
else
    if cache contains basic data
        get basic data from cache
    else
        get basic data from primary data source (expensive)
        save basic data to cache for next time

apply customisations to basic data (expensive)
save customised version to cache, using the parameter as a key
return customised product

所有这些工作都很好,但我现在正在尝试找出当底层数据源更改时使缓存数据无效的最佳方法。如果基本产品信息发生变化,那么所有定制版本也需要过期。我会在需要的时候得到通知。

有没有更好的方法在Redis中缓存这种定制的、半分层的数据,这样它就可以过期了?

共有1个答案

葛嘉悦
2023-03-14

Redis的散列可以很好地满足你的需要。您可以将每个产品的版本存储为该产品的哈希键中的字段值。例如:

HSET id:14 1 "{your JSON data v1}"

获取版本只是使用产品的密钥和相关字段调用hget。要使整个哈希无效,del和/或expire

 类似资料:
  • 问题内容: 我有一些产品数据需要在Redis缓存中存储多个版本。数据是JSON序列化的。获取纯(基本)数据的过程非常昂贵,将其自定义为不同版本的过程也很昂贵,因此我想缓存所有版本以尽可能进行优化。假设自定义基于单个参数,我可以将该参数用作缓存键的一部分。 我计划用来检索产品数据的过程是这样的: 一切都很好,但是我现在正在尝试找出在基础数据源发生更改时使缓存数据无效的最佳方法。如果基本产品信息发生变

  • 问题内容: 我已经使用了C#Redis缓存。 但我想像这样存储数据 这样一键就可以存储所有客户列表,并且可以轻松地在该列表内搜索,分组,过滤客户数据 欢迎使用或回答 问题答案: 您可以使用ServiceStack.Redis高级IRedisTypedClient Typed API 来管理丰富的POCO类型。 首先为具有以下条件的客户获取类型化的Redis客户端: 这将解决用于管理客户POCO的高

  • 问题内容: 我正在计划将C#ASP.Net Web应用程序移到Azure(当前托管在单个专用服务器上)的过程中,并且正在研究缓存选项。当前,因为我们一次只能运行一个应用程序实例,所以我们有一个“进程中”内存缓存来缓解SQL DB的某些相同请求。 当前的过程是在管理器/服务对数据库的那些部分进行更改时清除缓存的某些部分,例如,我们有一个用户表,并且我们将拥有诸如“ User。{0}”之类的键,返回一

  • 我正在尝试缓存多页资源,但是只缓存了6个页面中的4个页面。有人在做这件事时有问题吗?将所有这些页面缓存在内存中效果很好,但将其保存到本地存储不起作用。有我不知道的限制吗?我正在用Chrome进行测试,它有足够的空间来存储我所存储的内容。

  • 我用ReactJS构建了一个渐进式Web应用程序,但遇到了一个问题。我正在使用mockApi获取数据。脱机时,我的应用程序不工作,因为服务人员只缓存静态资产。 如何将HTTP GET调用从mockApi保存到缓存存储?

  • 我将redis用于发布/订阅以及服务器端缓存。我的意思是,我的应用服务器将redis服务器作为一个进程运行(也可以作为缓存)。我有几个瘦客户端(运行redis client)以发布/订阅模式连接到此应用服务器。我想知道redis在哪里存储缓存数据?单独在服务器中,或者在客户端中也会有一个副本。如果有近100个Redis客户端通过发布/订阅通道连接到服务器,那么以这种方式使用Redis也是一个好主意