为单个密钥缓存多个字节数组

时间:2014-06-20 17:24:42

标签: java caching memcached

我必须缓存大字节数组。大多数情况下,字节数组的大小超过了底层缓存服务的可接受大小的最大大小。例如,Memcache只接受高达1MB的对象 因此,我提出的方法是将大字节数组拆分成小尺寸数组并单独缓存它们。更重要的是,当请求特定密钥时,应检索所有缓存的字节数组。我在php中找到了一些方法。但没有java实现。有没有人用Java做这样的事情?请点击任何资源代码。

1 个答案:

答案 0 :(得分:1)

您是否考虑将阵列拆分为较小的平安并将每个部分缓存在专用密钥下?当你想获取一个数组时,只需将每个部分合并为一个数组。

放入缓存:

String cacheKey = ...;
int maxItems = 10000;
int totalCount = myObjects.length;
MyObject [] myObjects = ...;
for (int i = 0; i < (totalCount  / maxItems) + 1; i++) {
  int endIndex = totalCount  > (maxItems * (i + 1)) ? maxItems * (i + 1) : totalCount;
  MyObject [] part = Arrays.copyOfRange(myObjects, i * maxItems, endIndex);
  cache.put(cacheKey + i, part);
}

从缓存中获取:

String cacheKey = ..'
int partNr = 0;
MyObject [] part;
MyObject [] myObjects = new MyObject[0];
do {
 part = cache.get(cacheKey + partNr);
 partNr++;
 // from guava
 if (part != null) {
   ObjectArrays.concat(myObjects, part, MyObject.class);
 }
} while (part != null && part.length > 0)

可以使用multiget优化一次获取所有部分,并使用multiset一次性将所有部分放入缓存中。