我必须缓存大字节数组。大多数情况下,字节数组的大小超过了基础缓存服务可接受的大小的最大大小。例如,Memcache仅接受最大1MB的对象。
因此,我提出的方法是将大字节数组拆分为小尺寸数组,并将其分别缓存。此外,当请求垂直密钥时,应检索所有缓存的字节数组。我在php中找到了一些方法。但是对于Java实现则没有。有没有人用Java做这样的事情?请提供任何资源代码片段。
最佳答案
您是否考虑过将阵列拆分成较小的大小并在专用密钥下缓存每个部分?当您要获取数组时,只需获取每个部分,然后合并为单个数组即可。
放入缓存:
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一次将所有零件放入缓存进行优化。