{"id":18562,"date":"2024-03-15T17:13:15","date_gmt":"2024-03-15T17:13:15","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/"},"modified":"2024-03-21T13:36:16","modified_gmt":"2024-03-21T13:36:16","slug":"how-to-use-cacheable-in-spring","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/","title":{"rendered":"How to use @Cacheable in Spring?"},"content":{"rendered":"<p>In Spring, the @Cacheable annotation is used to cache the return value of a method. When the method is called again with the same arguments, the result is retrieved directly from the cache without re-executing the method.<\/p>\n<p>To use the @Cacheable annotation, you need to follow the following steps:<\/p>\n<ol>\n<li>Enable caching using annotations.<\/li>\n<li>Make use of cache<\/li>\n<li>@Enable caching with the key based on the parameter.<\/li>\n<\/ol>\n<p>For example, consider the UserService interface and its implementation class:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title class_\">UserService<\/span> {\r\n    User <span class=\"hljs-title function_\">getUserById<\/span><span class=\"hljs-params\">(<span class=\"hljs-type\">long<\/span> id)<\/span>;\r\n}\r\n\r\n<span class=\"hljs-meta\">@Service<\/span>\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">UserServiceImpl<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title class_\">UserService<\/span> {\r\n\r\n    <span class=\"hljs-meta\">@Override<\/span>\r\n    <span class=\"hljs-meta\">@Cacheable(value = \"userCache\", key = \"#id\")<\/span>\r\n    <span class=\"hljs-keyword\">public<\/span> User <span class=\"hljs-title function_\">getUserById<\/span><span class=\"hljs-params\">(<span class=\"hljs-type\">long<\/span> id)<\/span> {\r\n        <span class=\"hljs-comment\">\/\/ \u4ece\u6570\u636e\u5e93\u4e2d\u83b7\u53d6\u7528\u6237\u6570\u636e<\/span>\r\n        <span class=\"hljs-comment\">\/\/ ...<\/span>\r\n        <span class=\"hljs-keyword\">return<\/span> user;\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>In the example mentioned above, the @Cacheable annotation is used on the getUserById() method, specifying the cache name as &#8220;userCache&#8221; and the cache key as the id parameter. When the getUserById() method is called, if the result with the specified key already exists in the cache, it is retrieved directly from the cache; otherwise, the method is executed and the result is stored in the cache.<\/p>\n<p>It is important to note that in order for the @Cacheable annotation to work, you also need to configure a cache manager in the Spring configuration file, such as using SimpleCacheManager.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">bean<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"cacheManager\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"org.springframework.cache.support.SimpleCacheManager\"<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"caches\"<\/span>&gt;<\/span>\r\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">set<\/span>&gt;<\/span>\r\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">bean<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean\"<\/span> <span class=\"hljs-attr\">p:name<\/span>=<span class=\"hljs-string\">\"userCache\"<\/span>\/&gt;<\/span>\r\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">set<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">property<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">bean<\/span>&gt;<\/span>\r\n<\/code><\/pre>\n<p>The above configuration creates a cache named &#8220;userCache&#8221; using ConcurrentMapCacheFactoryBean as the cache implementation. You can also use other cache implementations such as Ehcache, Redis, etc.<\/p>\n<p>In this way, when the getUserById() method is called multiple times with the same id parameter, the return value will be directly retrieved from the cache instead of executing the method body again, improving system performance.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Spring, the @Cacheable annotation is used to cache the return value of a method. When the method is called again with the same arguments, the result is retrieved directly from the cache without re-executing the method. To use the @Cacheable annotation, you need to follow the following steps: Enable caching using annotations. Make use [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-18562","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to use @Cacheable in Spring? - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to use @Cacheable in Spring?\" \/>\n<meta property=\"og:description\" content=\"In Spring, the @Cacheable annotation is used to cache the return value of a method. When the method is called again with the same arguments, the result is retrieved directly from the cache without re-executing the method. To use the @Cacheable annotation, you need to follow the following steps: Enable caching using annotations. Make use [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T17:13:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T13:36:16+00:00\" \/>\n<meta name=\"author\" content=\"Emily Johnson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emily Johnson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/\"},\"author\":{\"name\":\"Emily Johnson\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378\"},\"headline\":\"How to use @Cacheable in Spring?\",\"datePublished\":\"2024-03-15T17:13:15+00:00\",\"dateModified\":\"2024-03-21T13:36:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/\"},\"wordCount\":241,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/\",\"name\":\"How to use @Cacheable in Spring? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T17:13:15+00:00\",\"dateModified\":\"2024-03-21T13:36:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use @Cacheable in Spring?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378\",\"name\":\"Emily Johnson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g\",\"caption\":\"Emily Johnson\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/emilyjohnson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to use @Cacheable in Spring? - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/","og_locale":"en_US","og_type":"article","og_title":"How to use @Cacheable in Spring?","og_description":"In Spring, the @Cacheable annotation is used to cache the return value of a method. When the method is called again with the same arguments, the result is retrieved directly from the cache without re-executing the method. To use the @Cacheable annotation, you need to follow the following steps: Enable caching using annotations. Make use [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T17:13:15+00:00","article_modified_time":"2024-03-21T13:36:16+00:00","author":"Emily Johnson","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Emily Johnson","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/"},"author":{"name":"Emily Johnson","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378"},"headline":"How to use @Cacheable in Spring?","datePublished":"2024-03-15T17:13:15+00:00","dateModified":"2024-03-21T13:36:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/"},"wordCount":241,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/","name":"How to use @Cacheable in Spring? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T17:13:15+00:00","dateModified":"2024-03-21T13:36:16+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-cacheable-in-spring\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to use @Cacheable in Spring?"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378","name":"Emily Johnson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g","caption":"Emily Johnson"},"url":"https:\/\/www.silicloud.com\/blog\/author\/emilyjohnson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=18562"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18562\/revisions"}],"predecessor-version":[{"id":52251,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18562\/revisions\/52251"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}