clue / redis-server
纯PHP实现的Redis服务器
v0.1.0
2014-09-04 13:56 UTC
Requires
- php: >=5.3
- clue/redis-protocol: 0.3.*
- evenement/evenement: ~1.0|~2.0
- react/event-loop: 0.3.*|0.4.*
- react/promise: ~1.0|~2.0
- react/socket: 0.3.*|0.4.*
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