我们计划在应用程序端缓存数据库表(以避免数据库调用)。我们的缓存是键和值对实现如果我使用主键(column1)作为键,所有其他数据作为值,我们如何对缓存执行以下查询?
从表中选择*列1=?
从表中选择*,其中
第2列=?第3栏=?从表中选择*列4=和
第5列=第6栏=?
一个最简单的选择是构建3个缓存,如下所示。
(列1)-->数据(列2+列3)-->数据(列4+列5)-->
数据
还有更好的选择吗?
要点:
表包含数百万条记录
我们使用Java ConcurrentHashMap来实现缓存。
最佳答案
看起来你想要一个内存缓存。番石榴有很酷的缓存——你需要一个加载缓存。
以下是LoadingCache的链接
基本上,对于您的问题,我们的想法是使用三个loadingcache。LoadingCache有一个应该实现的方法该方法告诉在给定输入的情况下加载缓存,如何在缓存未命中时获取数据。因此,第一次访问query1的加载缓存时,将出现缓存未命中。加载缓存将使用您实现的方法(您的经典dao方法)来获取数据,将其放入缓存,然后将其返回给您。下次访问时,它将从内存中的番石榴缓存中提供。
如果你有三种方法
Data getData(Column1 column)
Data getData(Column2 column2, Column3 column3)
Data getData(Column4 column4, Column5 column5, Column6 column6)
三个LoadingCache将从您编写的加载实现中调用这些方法就这样我觉得得到你想要的东西很简单。