首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POLICY_KEY_SEND怎么用?

POLICY_KEY_SEND怎么用?
EN

Stack Overflow用户
提问于 2022-04-11 07:57:53
回答 1查看 156关注 0票数 3

我试图在PK中使用golang保存记录,默认策略阻止PK显示,所以我需要使用策略POLICY_KEY_SEND。我可以使用PHP来执行这个策略,但是我不知道如何在库中使用它,这是我的代码(Aerospike和PHP)

Golang (不知道如何实施政策POLICY_KEY_SEND)

代码语言:javascript
复制
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)

代码语言:javascript
复制
<?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):

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-11 08:37:31

试着添加:

代码语言:javascript
复制
writePolicy.SendKey = true

在打电话之前:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71824413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档