Giter Club home page Giter Club logo

redisless's Introduction

RedisLess

Discord Test and Build


THIS PROJECT IS TESTABLE, BUT NOT PRODUCTION READY YET!!


RedisLess is a fast, lightweight, embedded and scalable in-memory Key/Value store library compatible with the Redis API.

RedisLess is the concatenation of Redis and Serverless.

Motivation

As a backend developer, I mostly work on providing web API for frontend developers and backend developers. Redis is part of my toolset - especially when I share data and sync states between my backend apps. For those simple use cases, I don't want to have to spawn a Redis server.

So, imagine a world where your Redis instance is nothing more than a lib in your app. Imagine that this lib can sync the data with other neighborhood instances?

That's the idea behind RedisLess, a lightweight, embedded, and scalable in-memory Key/Value store library compatible with the Redis API.

Follow me on Twitter ๐Ÿ™‹โ€โ™‚๏ธ

Read more about RedisLess:

How to use it?

To use RedisLess, you only need to:

  1. Install RedisLess library for your favorite language (see supported clients below).
  2. Connect your favorite Redis client to redis://localhost:16379.
  3. You don't need to change your code - RedisLess is Redis API compatible. (see supported Redis commands)

Under the hood, the RedisLess library starts a local Redis API compatible instance on port 16739 (you can change the port).

NodeJS client

Install

# RedisLess library with Python binding
npm install redisless

# redis client
npm install async-redis

Usage

const {RedisLess} = require('redisless');
const redis = require('async-redis');

const port = 16379;
const redisless = new RedisLess(port);

redisless.start();

const r = redis.createClient({host: 'localhost', port: port});

await r.set('foo', 'bar');
await r.get('foo'); // return 'bar'
await r.del('foo'); // delete key 'foo'

redisless.stop();

Python client

Install

# RedisLess library with Python binding
pip install redisless

# redis client
pip install redis

Usage

from redisless import RedisLess
import redis

redisless = RedisLess()

# start RedisLess embedded instance
redisless.start()

# Connect to RedisLess on localhost:16379
redis = redis.Redis(host='localhost', port=16379)

redis.set('foo', 'bar')
redis.get('foo')  # return bar 
redis.delete('foo')  # return 1 

# stop RedisLess embedded instance
redisless.stop()

What is RedisLess

  • Embedded in-memory. (No Redis server required!).
  • Compatible with the Redis API (RESP).
  • Not intrusive: you don't need to modify you code to use RedisLess!
  • Built with DX and performance in mind.
  • Cloud native friendly.

What RedisLess is not:

  • Production ready yet.
  • 1:1 Redis implementation.

Use cases

The goal of RedisLess is not to remove the need of Redis server for heavy workload. If you consider to store more than 2 GB of data in RedisLess you are better to use Redis. There is no hard limit, but RedisLess is designed to manage and share small dataset between apps.

โœ… Good use cases:

  • Distributed lock between your apps.
  • Share data (lower than 2 GB) between your apps.
  • Cache where reads are more important than writes.

โŒ Bad use cases:

  • Store more than 2 GB of data.
  • Cache where writes are more important than reads.

Planned features

Planned supported clients

Expected performance

Strong attention to performance and code cleanliness is given when designing RedisLess. It aims to be crash-free, super-fast and put a minimum strain on your server resources.

RedisLess is written in Rust and export functions through FFI (Foreign Function Interface), making it usable from any language. We provide clients for NodeJS, Python, Golang, Java, and Rust. Supporting a new language can be done in 5 minutes. Look at Python and NodeJS clients implementation for inspiration.

Contribution welcome!

It is never too soon to contribute to a great project. If you are interested in contributing, please join us on Discord, then we can discuss. The project is in its early days, but we are serious about building a solid library to help thousands of developers.

Set up MacOSX development environment

Pre-requisites

  1. Install Xcode
  2. Install Brew
  3. Install Rust
  4. Run brew install mingw-w64 to cross build for Windows
  5. Run brew install FiloSottile/musl-cross/musl-cross to cross build for Linux
  6. Run brew tap SergioBenitez/osxct && brew install x86_64-unknown-linux-gnu # to cross build for Linux

Build clients

To build NodeJS, Python, Golang and other libs you need to run:

cd scripts && ./build-for-mac.sh && cd ..

Use clients

Once the libs built, you are ready to use the clients into the clients folder.

Contributors

Thanks to our contributors โค๏ธ

References

redisless's People

Contributors

barkanido avatar evoxmusic avatar hedonhermdev avatar marcosmejias avatar murugesh-r avatar pepoviola avatar pjeziorowski avatar rezahandzalah avatar tbmreza 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.