int ngx_shmap_inc_int(ngx_shm_zone_t* zone, ngx_str_t* key,int64_t i,uint32_t exptime, int64_t* ret) { assert(zone != NULL); assert(key != NULL); assert(ret != NULL); ngx_int_t rc = 0; ngx_str_t data = ngx_null_string; uint8_t value_type = VT_INT64; rc = ngx_shmap_get(zone, key, &data, &value_type, NULL,NULL); if(rc == 0){ if(value_type != VT_INT64){ //NLOG_ERROR("key [%V] value_type [%d] invalid!",key, value_type); return -1; } int64_t* p = (int64_t*)data.data; *ret = __sync_add_and_fetch(p, i); }else{ //不存在,插入新的 ngx_str_set_int64(&data, &i); rc =ngx_shmap_set(zone, key, &data, value_type, exptime,0); if(rc == 0){ *ret = i; } } return rc; }
void ngx_str_handler_set_int64(ngx_str_t* key, int64_t* ikey) { ngx_str_set_int64(key,ikey); }