aerospike/aerospike-php

Aerospike PHP 扩展预览版

v1.1.0 2024-06-05 15:14 UTC

README

PHP version

Aerospike PHP 8+ 客户端(v1.0.0)

PHP 8+ 的 Aerospike 客户端库。

PHP-Client 介绍

这是 Aerospike PHP 客户端的文档。PHP 客户端包含两个主要组件。首先,我们有一个用 Rust 编写的强大 PHP 客户端和一个用 Go 编写的连接管理器,作为 PHP 进程之间的共享资源。连接管理器守护进程有效地处理 PHP 进程和 Aerospike 服务器之间的所有请求和响应。

要求

设置

  • 克隆 PHP-Client 仓库
cd php-client

设置 Aerospike 客户端连接管理器

安装依赖项并运行 Aerospike 连接管理器

  1. 确保已安装 go 工具链。从 Go 编程语言 下载包。按照步骤正确安装 Go。 注意:请确保 PATH 变量已更新为 GOBIN 路径。
  2. 安装 protobuf 编译器
   go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
  1. 进入 php-client/aerospike-connection-manager 目录
cd php-client/aerospike-connection-manager 
  1. 构建并运行 aerospike-connection-manager
sudo make

注意:请查看 php-client/aerospike-connection-manager 目录下的 README.md,以获取有关设置 aerospike-connection-manager 和配置客户端策略的更多信息。

构建并安装 PHP-Client

  • 检查 PHP 版本
php -v
  • 安装和设置 Aerospike 服务器
  • 要默认路径下构建和安装 PHP-Client,运行 makefile
cd php-client
sudo make
  • 要手动构建和安装 PHP-Client,运行以下命令
cd php-client
cargo clean && cargo build --release
  • 构建成功后,将 target/release/libaerospike$(EXTENSION) [EXTENSION = .so 对于 Linux 和 .dylib 对于 Mac 和 Windows] 文件从到 PHP 扩展目录路径的文件中复制。
  • extension=libaerospike$(EXTENSION) 添加到您的 php.ini 文件中。
  • 运行 phpunit tests/ 以确保设置和构建成功。

注意:为了测试能够成功运行,Aerospike 服务器必须正在运行。

运行您的 PHP 项目

  1. 运行您的 PHP 脚本
  • 在运行脚本之前,必须运行 Aerospike 连接管理器和 Aerospike 服务器。
  • 一旦构建成功并且所有先决条件都满足,将 Aerospike 命名空间导入您的 PHP 脚本。
  • 要连接到 Aerospike 连接管理器,请添加
	$socket = "/tmp/asld_grpc.sock";
	$client = Client::connect($socket); 
  • 运行 php 脚本。如果没有错误,则表示您已成功连接到 Aerospike 数据库。

注意:如果连接管理器守护进程崩溃,您必须手动从其路径中删除文件 /tmp/asld_grpc.sock

sudo rm -r /tmp/asld_grpc.soc
  • 配置策略:配置策略(读取、写入、批量和信息) - 这些策略可以通过PHP代码中的getter和setter进行设置。创建该策略类的对象时,将初始化该策略的默认值。例如
	// Instantiate the WritePolicy object
	$writePolicy = new WritePolicy();

	$writePolicy->setRecordExistsAction(RecordExistsAction::Update);
	$writePolicy->setGenerationPolicy(GenerationPolicy::ExpectGenEqual);
	$writePolicy->setExpiration(Expiration::seconds(3600)); // Expiring in 1 hour
	$writePolicy->setMaxRetries(3);
	$writePolicy->setSocketTimeout(5000);

文档

问题

如果有任何错误、功能请求或反馈 -> 请在GitHub上创建一个问题。Aerospike客户端工程团队将定期审查问题。

用法

以下是在Aerospike数据库中进行CRUD操作的非常简单的示例。

<?php
namespace Aerospike;

try{
  $socket = "/tmp/asld_grpc.sock";
  $client = Client::connect($socket);
  var_dump($client->socket);
}catch(AerospikeException $e){
  var_dump($e);
}


$key = new Key("namespace", "set_name", 1);

//PUT on differnet types of values
$wp = new WritePolicy();
$bin1 = new Bin("bin1", 111);
$bin2 = new Bin("bin2", "string");
$bin3 = new Bin("bin3", 333.333);
$bin4 = new Bin("bin4", [
	"str", 
	1984, 
	333.333, 
	[1, "string", 5.1], 
	[
		"integer" => 1984, 
		"float" => 333.333, 
		"list" => [1, "string", 5.1]
	] 
]);

$bin5 = new Bin("bin5", [
	"integer" => 1984, 
	"float" => 333.333, 
	"list" => [1, "string", 5.1], 
	null => [
		"integer" => 1984, 
		"float" => 333.333, 
		"list" => [1, "string", 5.1]
	],
	"" => [ 1, 2, 3 ],
]);

$client->put($wp, $key, [$bin1, $bin2, $bin3, $bin4, $bin5]);

//GET
$rp = new ReadPolicy();
$record = $client->get($rp, $key);
var_dump($record->bins);

//UPDATE
$client->prepend($wp, $key, [new Bin("bin2", "prefix_")]);
$client->append($wp, $key, [new Bin("bin2", "_suffix")]);

//DELETE
$deleted = $client->delete($wp, $key);
var_dump($deleted);

$client->close()

批量操作示例

<?php

namespace Aerospike;

$namespace = "test";
$set = "test";
$socket = "/tmp/asld_grpc.sock";

$client = Client::connect($socket);
echo "* Connected to the local daemon: $client->hosts \n";

$key = new Key($namespace, $set, 1);

$wp = new WritePolicy();
$client->put($wp, $key, [new Bin("bini", 1), new Bin("bins", "b"), new Bin("bin1", [1, 2, 3, 4])]);

$bwp = new BatchWritePolicy();
$exp = Expression::lt(Expression::intBin("bin1"), Expression::intVal(1));
$batchWritePolicy->setFilterExpression($exp);
$ops = [Operation::put(new Bin("put_op", "put_val"))];
$bw = new BatchWrite($bwp, $key, $ops);

$brp = new BatchReadPolicy();
$br = new BatchRead($brp, $key, []);

$bdp = new BatchDeletePolicy();
$bd = new BatchDelete($bdp, $key);

$bp = new BatchPolicy();
$recs = $client->batch($bp, [$bw, $br, $bd]);
var_dump($recs);

要查看更详细的示例,可以查看示例目录php-client/examples