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

多密钥和值对搜索

微生阳平
2023-03-14

我们计划在应用程序端缓存DB表(以避免DB调用)。我们的缓存是关键

从列1=?
的表中选择*,从列2=?和列3=?
的表中选择*,从列4=?和列5=?和列6=?的表中选择*。

一个最简单的选择是构建3个缓存,如下所示。

(专栏1)-

还有更好的选择吗?

要点:

  • 表包含数百万条记录
  • 我们使用Java ConcurrentHashMap实现缓存

共有2个答案

东门俊民
2023-03-14

你提到你必须缓存数百万条记录。这是一个相当大的数字。我不建议您构建自己的缓存框架,尤其是不要基于简单的数据结构,比如HashMaps。我强烈推荐Redis——请访问http://redis.io.Twitter、Stackoverflow等公司正在使用Redis进行缓存。

这是Redis的现场演示-http://try.redis.io

翟俊哲
2023-03-14

看起来你想要一个内存缓存。Guava有很酷的缓存——你需要一个LoadingCache。

下面是LoadingCache的链接

基本上,对于您的问题,我们的想法是使用三个LoadingCache。LoadingCache有一个应该实现的方法。该方法告诉加载给定输入的缓存,如何在缓存未命中的情况下获取数据。因此,第一次访问query1的加载缓存时,会出现缓存未命中。加载缓存将使用您实现的方法(您的经典DAO方法)获取数据,将其放入缓存,然后返回给您。下次您访问它时,它将从内存中的番石榴缓存中提供。

所以如果你有三种方法

Data getData(Column1 column)
Data getData(Column2 column2, Column3 column3)
Data getData(Column4 column4, Column5 column5, Column6 column6)

您的三个LoadingCache将从您编写的加载实现中调用这些方法。就这样。我发现得到你想要的东西非常干净和简单。

 类似资料:
  • 这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。

  • 数以千计的秘密在我的蓝色钥匙库里。所以每当我需要在Azure门户检查/查看秘密值时,我将需要在多次加载所有秘密后向上滚动到最后。除了API之外,还有什么捷径可以看到吗?比你提前!!

  • 我有两个不同的密钥对值,使用Javakeytools生成并存储在两个不同的文件中,称为keystore1.jks和keystore2.jks. 我所做的是从keystore2导入了密钥对。jks呼叫keystore1。jks通过下面的命令 我已经添加了密钥。jks到服务器使用这个密钥库监听ssl。 现在我已经从keystore2文件中导入了公钥。jks到名为truststore的信任库文件。jks

  • MAC( M essage A uessntication C ode)算法是一种对称密钥加密技术,用于提供消息认证。 为了建立MAC过程,发送方和接收方共享对称密钥K. 实质上,MAC是在基础消息上生成的加密校验和,它与消息一起发送以确保消息验证。 使用MAC进行身份验证的过程如下图所示 - 在Java中, javax.crypto包的Mac类提供了消息认证代码的功能。 按照以下步骤使用此类创建

  • 我们需要使用Azure key vault创建RSA密钥对,并将RSA公钥复制到外部系统。其要求是外部系统使用公钥加密数据,内部系统与azure key vault对话并对数据进行解密。我还没有访问Azure key vault的权限,所以需要查看文档。我有两个基本问题: > 有没有一种方法可以使用Azure portal以文本格式导出RSA公钥,而不使用API(https://docs.micr