2017 © Pedro Peláez
 

library redis-server

A redis server implementation in pure PHP

image

clue/redis-server

A redis server implementation in pure PHP

  • Thursday, September 4, 2014
  • by clue
  • Repository
  • 11 Watchers
  • 111 Stars
  • 51 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 22 Forks
  • 8 Open issues
  • 8 Versions
  • 2 % Grown

The README.md

clue/redis-server Build Status

A Redis server implementation in pure PHP. Not for the faint-hearted., (*1)

Note: This project is in early alpha stage! Feel free to report any issues you encounter., (*2)

Introduction

Motivation

Redis is a fast in-memory key-value database. This project aims to provide a simple alternative to the official Redis server implementation if installing it is not an option., (*3)

Why would I use this project if I already have the official Redis server installed? Simply put, you wouldn't. Ever., (*4)

Project goals

  • ✓ Implement an in-memory datastore using the Redis protocol
  • ✓ Compatiblity with common Redis clients and tools
    • ✓ redis-cli
    • ✓ redis-benchmark
  • ✓ SOLID and modern design, tested and modular components
  • ✗ Implement all commands (see below for list of supported commands)

Supported commands

Eventually, this project aims to replicate all commands of the official Redis server implementation and their exact behavior., (*5)

So far, the following list of commands shows what's already implemented:, (*6)

  • Keys
    • DEL
    • EXISTS
    • EXPIRE
    • EXPIREAT
    • KEYS
    • PERSIST
    • PEXPIRE
    • PEXPIREAT
    • PTTL
    • RANDOMKEY
    • RENAME
    • RENAMENX
    • SORT
    • TTL
    • TYPE
  • Strings
    • APPEND
    • DECR
    • DECRBY
    • GET
    • GETRANGE
    • GETSET
    • INCR
    • INCRBY
    • MGET
    • MSET
    • MSETNX
    • PSETEX
    • SET
    • SETEX
    • SETNX
    • SETRANGE
    • STRLEN
  • Lists
    • LINDEX
    • LLEN
    • LPOP
    • LPUSH
    • LPUSHX
    • LRANGE
    • RPOP
    • RPOPLPUSH
    • RPUSH
    • RPUSHX
  • Connection
    • ECHO
    • PING
    • QUIT
    • SELECT
  • Server
    • AUTH
    • CLIENT KILL
    • CLIENT LIST
    • CLIENT GETNAME
    • CLIENT SETNAME
    • CONFIG GET
    • CONFIG SET
    • DBSIZE
    • FLUSHALL
    • FLUSHDB
    • SHUTDOWN
    • TIME

For details, refer to the excellent official documentation of Redis commands., (*7)

All available commands are expected to behave just like their counterparts in Redis v2.6+, unless otherwise noted. If you find a command to misbehave, don't hesitate to file a bug., (*8)

Obviously, this list is incomplete in that it does not include every command supported by Redis. If you find a command is missing, please submit a PR :), (*9)

Benchmarking performance

As usual, just about every benchmark is biased - you've been warned., (*10)

You can use the redis-benchmark script that is included when installing the official Redis server., (*11)

$ redis-benchmark -p 1337 -q

Some benchmarking results:, (*12)

# official redis-server
$ redis-server --port 1338
$ redis-benchmark -t set,get -p 1338 -q
SET: 121951.22 requests per second
GET: 151515.16 requests per second

# clue/redis-server PHP 5.5
$ php bin/redis-server.php
$ redis-benchmark -t set,get -p 1337 -q
SET: 18761.73 requests per second
GET: 22172.95 requests per second

# clue/redis-server HHVM
$ hhvm -vEval.Jit=true bin/redis-server.php
$ redis-benchmark -t set,get -p 1337 -q
SET: 49019.61 requests per second
GET: 57142.86 requests per second

So depending on your configuration, expect the original implementation to be 2x to 5x as fast. Some thoughts that have a significant effect on the performance:, (*13)

  • HHVM is significantly faster than standard PHP (2.5x)
  • Installing ext-libevent (not available for HHVM unfortunately) will significantly improve the performance for concurrent connections. This is not a hard requirement, but redis-benchmark defaults to 50 concurrent connections which slows down the whole server process due to relying on a stream_select() call otherwise.
  • The bin/redis-server.php includes a $debug flag (which defaults to false). Disabled debugging output significantly improves performance (3x)
  • The benchmark should not be run from within a virtual machine. Running this on the host machine instead shows significant improvements (8x). For comparision, the same applies to official Redis, although it shows a smaller impact (3x).

Quickstart example

Once installed, you can start the Redis server by running the provided bin file:, (*14)

$ php bin/redis-server.php

Alternatively, you can also use this project as a lib in order to build your own server like this:, (*15)

$factory = new Factory($loop);
$factory->createServer('localhost:1337')->then(function (Server $server) use ($loop) {
    $server->on('connection', function(Client $client) {
        echo $client->getRemoteAddr() .' connected' . PHP_EOL;    
    });
});

$loop->run();

Install

The recommended way to install this library cloning this repo and installing its dependencies through composer. New to composer?, (*16)

$ sudo apt-get install php5-cli git curl
$ git clone https://github.com/clue/php-redis-server.git
$ cd php-redis-server/
$ curl -s https://getcomposer.org/installer | php
$ php composer.phar install

Docker

This project is also available as a docker image. Using the clue/php-redis-server image is as easy as running this:, (*17)

$ docker run -d clue/php-redis-server

License

MIT, (*18)

The Versions

04/09 2014

dev-master

9999999-dev https://github.com/clue/php-redis-server

A redis server implementation in pure PHP

  Sources   Download

MIT

The Requires

 

by Christian Lück

redis server async react

04/09 2014

v0.1.0

0.1.0.0 https://github.com/clue/php-redis-server

A redis server implementation in pure PHP

  Sources   Download

MIT

The Requires

 

by Christian Lück

redis server async react

30/01 2014

dev-benchmark

dev-benchmark https://github.com/clue/redis-server

A redis server implementation in pure PHP

  Sources   Download

MIT

The Requires

 

by Christian Lück

redis server async react

30/01 2014

dev-transactions

dev-transactions https://github.com/clue/redis-server

A redis server implementation in pure PHP

  Sources   Download

MIT

The Requires

 

by Christian Lück

redis server async react

30/01 2014

dev-pubsub

dev-pubsub https://github.com/clue/redis-server

A redis server implementation in pure PHP

  Sources   Download

MIT

The Requires

 

by Christian Lück

redis server async react

29/01 2014

dev-blocking-list

dev-blocking-list https://github.com/clue/redis-server

A redis server implementation in pure PHP

  Sources   Download

MIT

The Requires

 

by Christian Lück

redis server async react

22/01 2014

v0.0.2

0.0.2.0 https://github.com/clue/redis-server

A redis server implementation in pure PHP

  Sources   Download

MIT

The Requires

 

by Christian Lück

redis server async react

21/07 2013

v0.0.1

0.0.1.0 https://github.com/clue/redis-react

Async redis client implementation

  Sources   Download

MIT

The Requires

 

by Christian Lück

redis client async react