我试图在PK中使用golang保存记录,默认策略阻止PK显示,所以我需要使用策略POLICY_KEY_SEND。我可以使用PHP来执行这个策略,但是我不知道如何在库中使用它,这是我的代码(Aerospike和PHP)
Golang (不知道如何实施政策POLICY_KEY_SEND)
package main
import "fmt"
import aero "github.com/aerospike/aerospike-client-go"
func main() {
client, err := aero.NewClientWithPolicyAndHost(aero.NewClientPolicy(),
aero.NewHost("192.168.7.241", 3000),
aero.NewHost("192.168.7.243", 3000),
aero.NewHost("192.168.7.244", 3000),
aero.NewHost("192.168.7.245", 3000),
)
if err != nil {
fmt.Println("AEROSPIKE CON ERR :",nil)
} else {
fmt.Println("SUCCESS AEROSPIKE")
namespace := "test"
setName := "test_golang_set"
key,err := aero.NewKey(namespace,setName,"ASDF1234")
if err != nil {
fmt.Println("AEROSPIKE KEY ERR :",nil)
} else {
// define some bins
bins := aero.BinMap{
"game" : "P4", // you can pass any supported type as bin value
"genre" : "RPG",
"price" : 59.9,
}
writePolicy := aero.NewWritePolicy(0, 0)
err = client.Put(writePolicy, key, bins)
if err != nil {
fmt.Println("AEROSPIKE PUT ERR :",nil)
} else {
fmt.Println("AEROSPIKE PUT SUCCESS")
}
}
}
}PHP (使用POLICY_KEY_SEND)
<?php
/*blablah connection stuff*/
$name_space = "test";
$sets = "test_golang_set";
$pk_sets = "HIJK4869";
$key = $aeroDB->initKey($name_space,$sets,$pk_sets);
$option = [
Aerospike::OPT_POLICY_KEY => Aerospike::POLICY_KEY_SEND
];
$bins = [
'game' => 'ELDEN RING',
'genre' => 'Relaxing',
'price' => 59.9
];
$putStatus = $aeroDB->put($key,$bins,0,$option);
if($putStatus == Aerospike::OK) {
echo "OK";
} else {
echo "ERR";
}这是结果示例,由Golang生成的最后两个记录(由于不使用POLICY_KEY_SEND而未显示PK),第一个由PHP生成的记录(PK显示,因为POLICY_KEY_SEND):
aql> select * from test.test_golang_set
+------------+--------------+------------+-------+
| PK | game | genre | price |
+------------+--------------+------------+-------+
| "HIJK4869" | "ELDEN RING" | "Relaxing" | 59.9 |
| | "P5" | "RPG" | 59.9 |
| | "P4" | "RPG" | 59.9 |
+------------+--------------+------------+-------+
3 rows in set (0.508 secs)ps :我用的是这条戈朗机场:https://github.com/aerospike/aerospike-client-go
发布于 2022-04-11 08:37:31
试着添加:
writePolicy.SendKey = true在打电话之前:
err = client.Put(writePolicy, key, bins)根据Aerospike客户端文档: SendKey选项是BasePolicy的一部分(默认为SendKey = false),这是WritePolicy的基本策略。
https://pkg.go.dev/github.com/aerospike/aerospike-client-go#BasePolicy https://pkg.go.dev/github.com/aerospike/aerospike-client-go#WritePolicy
https://stackoverflow.com/questions/71824413
复制相似问题