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.

相关文章

前言 逆向工程从数据库表直接生成代码,是日常开发中常用的敏...
前言 Java网络编程之Socket套接字,Socket套接字使用TCP提供...
前言 虽然现在已经很少项目会涉及GUI技术,但作为一个合格的...
前言 几乎所有的系统都有密码安全要求,这是基础的安全策略,...
前言 当我们在写设计文档,或者是其他涉及到数据架构、表结构...
前言 Fiddler是一款强大的Web调试代理工具,又称抓包软件,本...