The Benefits of a Go Cache

Posted by Eldon Broady on January 29th, 2021

Micro services at various companies get jotted down in different computer languages: some companies use Java, JVM-based language, or even Python. Other monolithic platforms write in PHP as well.

A reasonably recent language backed by the search engine giant Google, going by the name of “Go,” is being popularized. Its user base is improving by the day, and this is because it is advertised smartly. You can see it being announced as compiled, concurrent, imperative, and structured programming language.

Go has a managed memory, which makes it safer than many other computing languages to use. It even comes out to be easier to use than C or C++. Open-source platforms, such as Dgraph, have their open-source projects in Go to see how it handles enormous traffic. Go offers a mature way of handling fast compilation, execution, and utilization of machine cores.

It is a common point to have a sturdy cache system for everyday database systems. Every sound system needs it. The cache is safe for keeping and retrieving the recently accessed or frequently accessed items. The cache memory is usually configurable and has a utilization limit to it.

When it comes to the cache necessary for Go programming, we need the following requirements:

  • Concurrent
  • Memory-bound
  • Scale well as the number of cores and goroutines increase
  • Scale well under non-random key access distribution
  • High cache hit ratio

To meet the requirements, the cache in itself needs to be:

  • Fast, even with millions of entries
  • Able to evict entries after a predetermined amount of time

Talking specifically about Dgraph, the team brought together to address the challenges to create a Go cache library were tasked to monitor it next to Java 8’s famous Caffeine caching library. Even Neo4j uses Caffeine.

The most significant benefit of using Go cache is its concurrency. Suppose your project needs to provide concurrent access to the cache. In that case, Go has an easy command (synch.RWMutex) in front of the cache access function to ensure that only a single goroutine is sufficient to modify it at a time. Another great feature of Go cache is its simplest way to evict elements from the cache when used together with the FIFO queue. It also avoids collecting garbage. If you have a map, the garbage collector (GC) will touch every single item during the mark and scan phase. It becomes a nuisance if the map size is bigger. Thus, with Go, you can easily omit the issue. For more information about Go cache, check out this site.

It is also notable here that many companies, following the footsteps of Dgraph, have decided to give up on external caches like Redis, Memcached, or Couchbase. It is mainly because of the additional time needed on the network. In Go cache, there are already memory caches such as LRU groups cache, go-cache, TTL cache, free cache, etc.

Author Resource:-

Eldon Broady writes about database technologies, graph database, and modern API tools. You can find his thoughts at GraphQL technology blog. If you’re looking for a graph database software, visit this website.

Like it? Share it!


Eldon Broady

About the Author

Eldon Broady
Joined: June 21st, 2019
Articles Posted: 51

More by this author