![](/img/trans.png)
[英]How to use Redis Cache to store the data in java spring boot application?
[英]How to cache image files in spring java application?
在我面向公眾的 Web 應用程序中,圖像(連同元數據)的顯示方式就像使用 Spring 框架開發的相冊應用程序一樣。 我想要的是將文件系統中的所有圖像(數以千計)緩存在 RAM 中,以便在 HTML 中遇到類似圖像標記時:
<img src="images/folder1/subfolder/myimage.jpg" />
圖像是從緩存內存中提供的,而不是由 tomcat 網絡服務器從磁盤提供的,以實現高性能。
如何在 spring 框架 web 應用程序中實現這一點?
如果使用 mongodb 來存儲圖像元數據等 Web 內容,如何在同一個 Spring Web 應用程序中實現上述場景?
所以有兩個答案,一個不涉及 mongodb,一個涉及 mongodb。
Spring Cache 最初很容易設置,並且是非常可配置的。 如果您提供專用緩存庫,它將使用它; 如果沒有,它將使用內存中的並發哈希映射來保存緩存數據。 您將需要一個專用控制器,它可能類似於:
@ResponseBody
@RequestMapping(value = "/images/{path}", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE)
@Cacheable("images")
public byte[] image(@PathVariable path) throws IOException {
InputStream in = servletContext.getResourceAsStream("images/"+path);
return IOUtils.toByteArray(in);
}
這第一次加載圖像被調用並緩存它。 每次調用方法時都會返回相同的參數緩存值。
我首先要確保這個圖像緩存實際上是對性能的提升。 但是如果你決定使用它,可能你想使用一個專用的緩存庫,而不是可以很快填滿堆的默認庫。 但當然這取決於應用程序。
閱讀 Spring Cache https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-caching.html
@Christaan 的答案也可以擴展到將外部引用的圖像本地緩存到您的解決方案中,以在圈養環境中使用。 例如:
@ResponseBody
@RequestMapping(value = "/sample-image", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE)
@Cacheable("images")
public byte[] image() throws IOException {
URL url = new URL("http://iminsys.com/assets/images/pages/about/edrich.jpg");
InputStream in = new BufferedInputStream(url.openStream());
return FileCopyUtils.copyToByteArray(in); // using Spring's FileCopyUtils
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.