Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/OpenWeb-Archive/gen_spoxy
**DEPRECATED** caching made fun!
https://github.com/OpenWeb-Archive/gen_spoxy
deprecated elixir in-memory-caching
Last synced: about 1 month ago
JSON representation
**DEPRECATED** caching made fun!
- Host: GitHub
- URL: https://github.com/OpenWeb-Archive/gen_spoxy
- Owner: OpenWeb-Archive
- License: mit
- Archived: true
- Created: 2018-01-27T19:50:24.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2019-01-13T16:13:43.000Z (almost 6 years ago)
- Last Synced: 2024-04-21T07:08:36.923Z (8 months ago)
- Topics: deprecated, elixir, in-memory-caching
- Language: Elixir
- Homepage:
- Size: 63.5 KB
- Stars: 22
- Watchers: 14
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
- freaking_awesome_elixir - Elixir - Caching made fun. (Caching)
- fucking-awesome-elixir - gen_spoxy - Caching made fun. (Caching)
- awesome-list-microservice - gen_spoxy
- awesome-elixir - gen_spoxy - Caching made fun. (Caching)
README
# GenSpoxy
## DEPRECATION WARNING
**This package is now deprecated in favor of [Shielded Cache](https://github.com/SpotIM/shielded-cache). It is no longer being used in production nor is it being maintained.**
## Package Information
the `GenSpoxy` package consist of battle-tested abstractions that help creating in-memory caching
### Advantages of `GenSpoxy`:
1. Makes it very easy to create from scratch highly-concurrent applicative reverse-proxy
that holds an internal short-lived (configurable) cache.
1. CDN like Origin Shielding - when multiple clients ask for the same request and experience a cache miss,
the calculation will be done only once
1. Supports non-blocking mode for requests that are willing to receive stale cached data
1. Eases the time-to-market of features that require some caching### notes:
1. The default cache storage used is `ETS`
1. The default behaviour is `non-blocking`
1. Each request should be transformed to a signature deterministically (a.k.a. `req_key`)### usage example:
```elixir
defmodule SampleCache do
use GenSpoxy.Cache, prerender_module: SamplePrerender
enddefmodule SamplePrerender do
use GenSpoxy.Prerender@impl true
def do_req(req) do
# slow calculation of `req`
end@impl true
def calc_req_key(req) do
Enum.join(req, "-")
end
end# usage
opts = [
table_name: "sample-table",
do_janitor_work: true, # whether we garbage collect expired data
ttl_ms: 5_000 # the data is considered non-stale for 5 seconds
]# `req` is application dependant
req = %{url: "https://www.very-slow-server.com", platform: "mobile"}SampleCache.get_or_fetch(req, opts) # blocking manner
SampleCache.async_get_or_fetch(req, opts) # async manner (we're OK with accepting a stale response)
```