微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐