我们计划在应用程序端缓存DB表(以避免DB调用)。我们的缓存是关键&值对实现。如果我使用主键(column1)作为键,使用所有其他数据作为值,那么我们如何对缓存执行以下查询?
从表中选择* column1=在哪里? 从表中选择* column2=在哪里?column3=呢? 从表中选择* column4=在哪里?column5=呢?column6=呢?
一个最简单的选择是构建3个缓存,如下所示。
(column1) ->数据 (column2+column3) ->数据 (column4+column5) ->数据
还有其他更好的选择吗?
关键点:
发布于 2015-05-01 00:31:12
看来你想要一个内存缓存。番石榴有很酷的缓存--你需要一个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将从您编写的load实现中调用这些方法。就是这样。我发现得到你想要的东西既干净又简单。
发布于 2015-04-30 14:07:43
你说过你必须缓存数百万条记录。这是一个相当大的数字。我不建议您构建自己的缓存框架,特别是不基于简单的数据结构(如HashMaps )。我强烈推荐Redis在http://redis.io。Twitter、Stackoverflow等公司正在使用Redis作为缓存。
以下是Redis - http://try.redis.io的现场演示
https://stackoverflow.com/questions/29969858
复制相似问题