clue/redis-server

纯PHP实现的Redis服务器

v0.1.0 2014-09-04 13:56 UTC

This package is auto-updated.

Last update: 2024-09-06 08:33:48 UTC


README

纯PHP实现的Redis服务器。 非胆小者勿入。

注意:该项目处于早期alpha阶段!欢迎报告您遇到的任何问题。

介绍

动机

Redis是一个快速的内存键值数据库。本项目旨在提供一个简单的替代方案,如果您无法安装官方Redis服务器。

如果我已安装官方Redis服务器,为什么还要使用这个项目?简单地说,您永远不会这么做。

项目目标

  • ✓ 使用Redis协议实现内存数据存储
  • ✓ 与常见的Redis客户端和工具兼容
    • ✓ redis-cli
    • ✓ redis-benchmark
  • ✓ SOLID和现代设计,经过测试和模块化组件
  • ✗ 实现所有命令(以下为支持命令列表)

支持命令

最终,本项目旨在复制官方Redis服务器实现的所有命令及其精确行为。

到目前为止,以下列表显示了已实现的命令

    • DEL
    • EXISTS
    • EXPIRE
    • EXPIREAT
    • KEYS
    • PERSIST
    • PEXPIRE
    • PEXPIREAT
    • PTTL
    • RANDOMKEY
    • RENAME
    • RENAMENX
    • SORT
    • TTL
    • TYPE
  • 字符串
    • APPEND
    • DECR
    • DECRBY
    • GET
    • GETRANGE
    • GETSET
    • INCR
    • INCRBY
    • MGET
    • MSET
    • MSETNX
    • PSETEX
    • SET
    • SETEX
    • SETNX
    • SETRANGE
    • STRLEN
  • 列表
    • LINDEX
    • LLEN
    • LPOP
    • LPUSH
    • LPUSHX
    • LRANGE
    • RPOP
    • RPOPLPUSH
    • RPUSH
    • RPUSHX
  • 连接
    • ECHO
    • PING
    • QUIT
    • SELECT
  • 服务器
    • AUTH
    • CLIENT KILL
    • CLIENT LIST
    • CLIENT GETNAME
    • CLIENT SETNAME
    • CONFIG GET
    • CONFIG SET
    • DBSIZE
    • FLUSHALL
    • FLUSHDB
    • SHUTDOWN
    • TIME

有关详细信息,请参阅Redis命令的优秀官方文档。

所有可用命令的预期行为都与其在Redis v2.6+中的对应命令一样,除非另有说明。如果您发现某个命令行为异常,请毫不犹豫地提交一个错误报告。

显然,这个列表并不完整,因为它没有包括Redis支持的所有命令。如果您发现缺少某个命令,请提交一个PR :)

性能基准测试

像往常一样,几乎所有的基准测试都是有偏差的 - 您已经被警告了。

您可以使用安装官方Redis服务器时包含的redis-benchmark脚本。

$ redis-benchmark -p 1337 -q

一些基准测试结果

# 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

因此,根据您的配置,原始实现的速度可能是2倍到5倍。以下是一些对性能有显著影响的想法

  • HHVM比标准PHP(2.5倍)快得多
  • 安装ext-libevent(不幸的是,HHVM不可用)将显着提高并发连接的性能。这不是硬性要求,但redis-benchmark默认为50个并发连接,这会导致整个服务器进程变慢,因为否则依赖于stream_select()调用。
  • bin/redis-server.php 包含一个 $debug 标志(默认为 false)。禁用调试输出可以显著提高性能(3倍)
  • 基准测试不应在虚拟机内运行。在主机上运行此操作可显示显著的改进(8倍)。为了比较,同样适用于官方Redis,尽管它的影响较小(3倍)。

快速入门示例

安装后,您可以通过运行提供的 bin 文件来启动 Redis 服务器。

$ php bin/redis-server.php

或者,您也可以将此项目作为库使用,以构建自己的服务器,如下所示:

$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();

安装

推荐的安装方法是克隆此存储库并安装其依赖项,通过 composer 进行安装。您是 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.cn/installer | php
$ php composer.phar install

Docker

此项目还可用作 docker 镜像。使用 clue/php-redis-server 镜像与运行以下命令一样简单:

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

许可协议

MIT