# Hyperbolic Caching: Flexible Caching for Web Applications

### Presentation&#x20;

![](/files/-M_fIbOEbcZH87awRn35)

![](/files/-M_fIeAA6asvM0N_S8BC)

![](/files/-M_fIhc5ulatgyGDA0mz)

* Multi-tier data center&#x20;
* Cache tier: e.x. redis or memcache&#x20;
  * Properties: web-like request pattern, various item cost, item expiration and so on&#x20;

![](/files/-M_fJ3g3Ax8WR7W8olM5)

![](/files/-M_fJ8V3IV3wflIMXvV_)

![](/files/-M_fJHL85tcmV6D7zMUw)

![](/files/-M_fJUjS3UoPC9i5D70E)

![](/files/-M_fJagby3VyDN8Xjb1_)

![](/files/-M_fJlyI1iTNdBJKKiae)

![](/files/-M_fJpwhawhCgIXFHnyc)

![](/files/-M_fK17r25xFKY17Yah8)

![](/files/-M_fK4oKgYds1HCx-bnp)

![](/files/-M_fXxNNOUkHmuvSzwVJ)

* Number of accesses: Frequency captures independent draws property of workloads&#x20;
* Time since i entered cache: Addresses problem of LFU by measuring relative popularity&#x20;

![](/files/-M_fYgxbUSMdCPGXun-K)

Item requests: A A B C C&#x20;

* t = 1: pr(A) = 1&#x20;
* t = 2: pr(A) = 1&#x20;
* t = 3: pr(A) = 2/3, pr(B) = 1&#x20;
* t = 4, pr(A) = 2/4, pr(B) = 1/2, pr(C) = 1&#x20;
* t = 5, pr(A) = 2/5, pr(B) = 1/3, pr(C) = 2/2 = 1&#x20;

![](/files/-M_fZkbvUnycozU0moW-)

* Static workload&#x20;

![](/files/-M_fZwcAKNYmS14TzKWK)

* caching as a service company&#x20;
* 16 applications with cache sizes chosen by the application developers&#x20;
  * Only a few which Hyperbolic performs worse&#x20;

![](/files/-M_f_G8F3e4FF19beFwy)

![](/files/-M_f_Jb_sN6BiRukMHf6)

* item costs&#x20;
  * CPU / DB load: experience a miss, cause the item is the result of the join rather than simple look up&#x20;

![](/files/-M_f_zdWuOYhhFsWkTJb)

* GreedyDual&#x20;
  * Incorporating cost into LRU&#x20;

![](/files/-M_faEL88FJWRoP3LuVR)

![](/files/-M_faQVwrbETeMCYOgG2)

![](/files/-M_fadsYb7ptPwkqyQv0)

* Stress one of the backend and measure tail latency&#x20;
* Tracking costs per item and per class&#x20;
  * Load one of the backend, takes time to adjust to the knowledge --> spike in latency that is not experienced by per-class&#x20;

![](/files/-M_fb-eHcex32SJXF051)

![](/files/-M_fb5Bla01J4vAw43Ez)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sliu583.gitbook.io/blog/specific-work/wisr-group/cache/index/hyperbolic-caching-flexible-caching-for-web-applications.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
