Building an intelligent cache (memoization) in 2 steps


To build our intelligent cache we will use the below two libraries:

go-cache: It provides a mechanism to create cache with expiration time. Source code can be found here

beyond: It provides an awesome mechanism to take advantage of AOP. Source code can be found here

1. Code the Memoize advice

Let’s clone the code that will use in this tutorial.

git clone
cd smart-cache

We’ll implement an Around advice to achieve our purpose. An around advice surrounds a function/method invocation.

Let’s see the advice implementation in file advice/memoization.go.

Before method checks if there’re a cache entry for the request. If so, the function won’t be invoked, nor the returning method.

Returning method puts the function results into the cache.

Memoize function creates an instance of Memoization advice

2. Register the advice

Open file cmd/main.go and have a look at function Beyond

As we observe in the above image, we’re registering the Memoization advice for method ListPeopleByCity of type memDBClient in package storage. You can learn more about joinpoints registration here.

Elements will be cached during 5 seconds.

That’s mean that invocations to method ListPoepleByCity in file storage/mem.go will be surrounded by Memoize advice.

Let’s see it in action

To test it, we will use the file test/main.go

The second invocation to listPeople(“MAD”) shows that there’re 1 person living in MAD…. however after the entry is expired from the cache the invocation will show that there’re 2 people living in MAD

  1. Launch the server application with command

beyond run cmd/main.go

2. Runt the client

go run test/main.go

You can visualize the example here



If tech can change the world... why don't we use it to make it better?

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store