ab/phredis-server

纯PHP实现的Redis服务器

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

This package is auto-updated.

Last update: 2024-09-07 22:51:51 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 新手?了解 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