Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vpetrigo/caches
C++ cache with LRU/LFU/FIFO policies implementation
https://github.com/vpetrigo/caches
c-plus-plus cache cpp cpp11 fifo fifo-cache header-only lfu lfu-cache lru lru-cache
Last synced: 9 days ago
JSON representation
C++ cache with LRU/LFU/FIFO policies implementation
- Host: GitHub
- URL: https://github.com/vpetrigo/caches
- Owner: vpetrigo
- License: bsd-3-clause
- Created: 2016-05-17T16:43:53.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-04-10T16:41:16.000Z (7 months ago)
- Last Synced: 2024-04-14T20:21:30.168Z (7 months ago)
- Topics: c-plus-plus, cache, cpp, cpp11, fifo, fifo-cache, header-only, lfu, lfu-cache, lru, lru-cache
- Language: C++
- Homepage: http://rs-stuff.dev/caches/
- Size: 1.83 MB
- Stars: 277
- Watchers: 16
- Forks: 70
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
Awesome Lists containing this project
- awesome-algorithms - caches - LRU, LFU, FIFO cache C++ implementations (Awesome Algorithms / Cache)
README
[![CI](https://github.com/vpetrigo/caches/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/vpetrigo/caches/actions/workflows/ci.yml)
[![Build status](https://ci.appveyor.com/api/projects/status/kawd812e48065r7a?svg=true)](https://ci.appveyor.com/project/vpetrigo/caches)
[![codecov](https://codecov.io/gh/vpetrigo/caches/branch/master/graph/badge.svg?token=uExJPtyE0o)](https://codecov.io/gh/vpetrigo/caches)
[![version](https://img.shields.io/github/v/release/vpetrigo/caches)](https://github.com/vpetrigo/caches/releases)# C++ Cache implementation
This project implements a simple thread-safe cache with several page replacement policies:
* Least Recently Used
* First-In/First-Out
* Least Frequently UsedMore about cache algorithms and policy you could read on [Wikipedia](https://en.wikipedia.org/wiki/Cache_algorithms)
# Usage
Using this library is simple. It is necessary to include header with the cache implementation (`cache.hpp` file)
and appropriate header with the cache policy if it is needed. If not then the non-special algorithm will be used (it
removes the last element which key is the last in the internal container).Currently, there is only three of them:
* `fifo_cache_policy.hpp`
* `lfu_cache_policy.hpp`
* `lru_cache_policy.hpp`Example for the LRU policy:
```cpp
#include
#include "cache.hpp"
#include "lru_cache_policy.hpp"// alias for an easy class typing
template
using lru_cache_t = typename caches::fixed_sized_cache;void foo() {
constexpr std::size_t CACHE_SIZE = 256;
lru_cache_t cache(CACHE_SIZE);cache.Put("Hello", 1);
cache.Put("world", 2);
const auto hello_value = cache.Get("Hello");
const auto world_value = cache.Get("world");std::cout << *hello_value << *world_value << '\n';
// "12"
}
```## Custom hashmap usage
You can use a custom hashmap implementation for the `caches::fixed_sized_cache` class which has the same interface
`std::unordered_map` has.For example, you can declare LRU cache type like that:
```cpp
template
using lru_cache_t = typename caches::fixed_sized_cache>;
// ...
lru_cache_t cache{16};
cache.Put("Hello", 1);
std::cout << *cache.Get("Hello") << '\n';
```See `test` implementation which uses [`parallel-hashmap`](https://github.com/greg7mdp/parallel-hashmap).
# Requirements
The only requirement is a compatible C++11 compiler.
This project was tested in the environments listed below:
* MinGW64 ([MSYS2 project](https://msys2.github.io/))
* Clang 13.0+
* GCC 7+
* MSVC (VS 2015)If you have any issues with the library building, please let me know.
# Contributing
Please fork this repository and contribute back using [pull requests](https://github.com/vpetrigo/caches/pulls).
Features can be requested using [issues](https://github.com/vpetrigo/caches/issues). All code, comments, and critiques
are greatly appreciated.