DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Newsletter
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • How Cache Invalidation Caused Memory Pressure and API Failures at Scale
  • OpenSearch Heap Sizing: Swap, Page Cache, and the 50% Rule
  • Prompt Caching Doesn't Save Money on Turn One
  • Prompt Caching: Overriding Tokenization for Faster and More Cost-Effective AI

Trending

  • Engineering Audit-Ready Data Pipelines for Regulatory Reporting
  • Production RAG and LLM Systems: A Simple Q&A Guide
  • How Docker Is Becoming an AI Development Platform
  • Kafka With Spring Boot: Introduction

Draft This article hasn't been published, so readers can't see it.

In moderation This article is waiting for review, so readers can't see it yet.

Deleted This article has been deleted, so readers can't see it.

  1. DZone
  2. Data Engineering
  3. Data
  4. Need Micro Caching? Memoization to the Rescue

Need Micro Caching? Memoization to the Rescue

By 
Jakub Kubrynski user avatar
Jakub Kubrynski
·
Jan. 06, 15 · Interview
Post on X (opens in a new tab) Share on LinkedIn (opens in a new tab)
17.9K Views

Join the DZone community Save articles, join the discussion, and download Refcards and Trend Reports with a free account.

Join for free Already a member? Log in

Caching solves wide sort of performance problems. There are many ways to integrate caching into our applications. For example when we use Spring there is easy to use @Cacheable support. Quite easy but we still have to configure cache manager, cache regions, etc. Sometimes it's unfortunately like taking a sledgehammer to crack a nut. So what can we do to "go lighter"?

There is a technique called memoization. Technically it's as easy as pie but true genius lies in simplicity. Model solution looks as follows:

public Foo getValue() {
  if (storedValue == null) {
    storedValue = retrieveFoo();
  }
  return storedValue;
}

As you can see there is no problem in implementing it manually, but as long as we remember about DRY rule we can use already implemented solutions which additionally provides thread safety. Pretty good idea is to use Guava library.

// create
Supplier<Foo> memoizer = Suppliers.memoize(this::retrieveFoo);
 
// and use
Foo variable = memoizer.get();

Sometimes it's enough but what can we do if we need to specify TTL for our value? We have to store (cache) retrieved value only for few seconds and after exceeding defined duration get this value one more time? One more time we can use functionality provided by Guava. 

Supplier<Foo> memoizer = Suppliers.memoizeWithExpiration(this::retrieveFoo, 
    5, TimeUnit.SECONDS);
The above line builds memoizer with TTL = 5 seconds. As you can see - simple... but powerful :)


Cache (computing) Memoization

Published at DZone with permission of Jakub Kubrynski. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • How Cache Invalidation Caused Memory Pressure and API Failures at Scale
  • OpenSearch Heap Sizing: Swap, Page Cache, and the 50% Rule
  • Prompt Caching Doesn't Save Money on Turn One
  • Prompt Caching: Overriding Tokenization for Faster and More Cost-Effective AI

Partner Resources

×

Comments

Likes

Loading

The next likes didn't load. Please try again.

The likes didn't load

Please try again in a moment.

See who liked this

Log in or join DZone for free to see who liked this article.

Log in Join for free
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook