加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Aerospike:如何获得记录密钥?

发布时间:2020-12-14 16:42:48 所属栏目:Java 来源:网络整理
导读:Aerospike客户端具有 scanAll方法来读取其商店中的所有行. 我在下面的代码中使用它: ScanPolicy policy = new ScanPolicy();policy.concurrentNodes = true;policy.priority = Priority.DEFAULT;policy.includeBinData = true;policy.scanPercent = 100;cli
Aerospike客户端具有 scanAll方法来读取其商店中的所有行.
我在下面的代码中使用它:
ScanPolicy policy = new ScanPolicy();
policy.concurrentNodes = true;
policy.priority = Priority.DEFAULT;
policy.includeBinData = true;
policy.scanPercent = 100;

client.scanAll(policy,"namespaceName","setName",new ScanCallback() {
    @Override
    public void scanCallback(Key key,Record record) throws AerospikeException {
        STORE.put(key.userKey.toLong(),record.getValue("binName").toString());
    }
});

但是,由于userKey为null,所以NullPointerException完成.所有其他字段按预期有效.用户密钥是Long值,用于保存数据:

client.put(writePolicy,new Key("namespaceName",userKey),new Bin("binName",value));

一切都好,如果我这样做单一请求:

client.get(readPolicy,userKey));

可能有什么不对为什么userKey为空?

解决方法

Aerospike使用密钥和集名称来生成唯一的摘要,所以它只存储摘要.

如果设置了writePolicy.sendKey = true,则插入一条记录,则key将作为记录的元数据存储.
如果使用writePolicy.sendKey = true插入一条记录,那么只有在scanCallback()中才能获得关键字.

默认情况下,writePolicy.sendKey为false,所以默认情况下scanCallback()将为null.这就是为什么你的key.userKey.toLong()给出NullPointerException.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读