GithubHelp home page GithubHelp logo

gen_spoxy's Introduction

GenSpoxy

DEPRECATION WARNING

This package is now deprecated in favor of 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.
  2. CDN like Origin Shielding - when multiple clients ask for the same request and experience a cache miss, the calculation will be done only once
  3. Supports non-blocking mode for requests that are willing to receive stale cached data
  4. Eases the time-to-market of features that require some caching

notes:

  1. The default cache storage used is ETS
  2. The default behaviour is non-blocking
  3. Each request should be transformed to a signature deterministically (a.k.a. req_key)

usage example:

defmodule SampleCache do
  use GenSpoxy.Cache, prerender_module: SamplePrerender
end

defmodule 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)

gen_spoxy's People

Contributors

probably-not avatar yaronwittenstein avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.