定制 clue/redis-server 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

clue/redis-server

最新稳定版本:v0.1.0

Composer 安装命令:

composer require clue/redis-server

包简介

A redis server implementation in pure PHP

README 文档

README

A Redis server implementation in pure PHP. Not for the faint-hearted.

Note: This project is in early alpha stage! Feel free to report any issues you encounter.

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.

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

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.

So far, the following list of commands shows what's already implemented:

  • 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.

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.

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

Benchmarking performance

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

You can use the redis-benchmark script that is included when installing the official Redis server.

$ redis-benchmark -p 1337 -q

Some benchmarking results:

# 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:

  • 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:

$ php bin/redis-server.php

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

$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?

$ 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:

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

License

MIT

统计信息

  • 总下载量: 1.31k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 194
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 194
  • Watchers: 16
  • Forks: 35
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2014-01-26

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固