Aerospike C客户端API提供几个操作来存储数据到数据库:
aerospike_key_put()
— 将一个记录对象中指定的所有bin数据写入到集群。aerospike_key_operate()
— 对集群中的一条记录执行操作,包括写入和修改多个bin数据。 此章节主要讨论aerospike_key_put()操作,aerospike_key_operate()操作将在后面的【记录高级操作】章节中讨论。
后面的代码引用自示例目录【examples/basic_examples/put】,由Aerospike C客户端安装包自带。
请先阅读【建立连接】章节内容,理解如何建立与集群的连接。
aertospike_key_put()操作需要一个初始化过的记录对象,其包含要存入集群的多个bin数据。这里,我们在栈上初始化一个包含2个bin的记录对象。第一个bin名称是“test-bin-1”,类型为整型(integer);第二个bin名称是“test-bin-2",类型为字符串(string)。
as_record rec; as_record_inita(&rec, 2); as_record_set_int64(&rec, "test-bin-1", 1234); as_record_set_str(&rec, "test-bin-2", "test-bin-2-data");
写入记录时,数据库需要通过键(key)标别这条记录。下面我们为前述记录对象创建一个键。用来做键的是字符串”test-key",数据所在的namespace名称为“test”、set名称为“test-set”。其它数据类型也可用作键,比如:整型(integer)或二进制大对象块(blob)。
as_key key; as_key_init_str(&key, "test", "test-set", "test-key");
有了键,现在可将这条记录对象的数据写入数据库:
if (aerospike_key_put(&as, &err, NULL, &key, rec) != AEROSPIKE_OK) { fprintf(stderr, "err(%d) %s at [%s:%d]\n", err.code, err.message, err.file, err.line); }
当不再需要一条记录对象时,应该释放它及其关联的资源。
as_record_destroy(rec);
上面的示例中,记录对象和它关联bin + 值均是从栈上分配,所以调用as_record_destroy()不是必须的。
put()操作的默认行为是:
可通过as_policy_write对象修改aerospike_key_put()调用时的写入行为. 一些可作的策略修改举例如下:
修改write_policy.exist的值为AS_POLICY_EXISTS_REPLACE
应用需要在预定时间内响应调用者的情况下,可设置aerospike_key_put()调用时的事务超时时间,修改write_policy.timeout为相应的毫秒数。
一个常见的使用模式是“读取-修改-写入”记录(或称为“检查-设置),步骤包括:
具体请参见目录【examples/basic_examples/generation】。
在写入操作时,可通过设置记录对象的域成员ttl,修改记录的生存时间:
具体请参见目录【basic_examples/expire】。