Rumah > Soal Jawab > teks badan
Saya membaca dalam talian tentang perbezaan mereka
Tetapi saya mencuba sendiri dan mendapati incr juga boleh menentukan kenaikan seperti incrby, jadi rasanya tiada bezanya. Gambar di bawah adalah hasil ujian saya.
阿神2017-05-16 13:06:35
Berikut ialah kod sumber Redis Sebenarnya, pelaksanaan asas incr dan incrBy adalah konsisten, tetapi incrBy perlu melakukan pengesahan parameter
.//incr命令
void incrCommand(redisClient *c) {
incrDecrCommand(c,1);
}
//decr命令
void decrCommand(redisClient *c) {
incrDecrCommand(c,-1);
}
//incrBy命令
void incrbyCommand(redisClient *c) {
long long incr;
if (getLongLongFromObjectOrReply(c, c->argv[2], &incr, NULL) != REDIS_OK) return;
incrDecrCommand(c,incr);
}
//decrby命令
void decrbyCommand(redisClient *c) {
long long incr;
if (getLongLongFromObjectOrReply(c, c->argv[2], &incr, NULL) != REDIS_OK) return;
incrDecrCommand(c,-incr);
}
Dapat dilihat dari sini bahawa incr tidak menyokong parameter berangka.
Tetapi mengapa $redis disokong dalam PHP? Mungkin lapisan bawah perpustakaan ini menggunakan perintah incrBy redis
天蓬老师2017-05-16 13:06:35
Kod sumber telah disiarkan secara salah sebentar tadi, sila ubah suainya
Melihat melalui kod sumber sambungan phpredis, ia sepatutnya serasi bermula dari 2.0.9.
Semasa memanggil incr, bawa nombor jenis panjang Jika nombor itu bukan 1, hubungi incrby.
Dengan cara ini, apabila menggunakan incrBy, jika parameter berikut ialah 1, incr akan dipanggil.
PHP_METHOD(Redis, incr){
zval *object;
RedisSock *redis_sock;
char *key = NULL;
int key_len;
long val = 1;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l",
&object, redis_ce,
&key, &key_len, &val) == FAILURE) {
RETURN_FALSE;
}
if(val == 1) {
redis_atomic_increment(INTERNAL_FUNCTION_PARAM_PASSTHRU, "INCR", 1);
} else {
redis_atomic_increment(INTERNAL_FUNCTION_PARAM_PASSTHRU, "INCRBY", val);
}
}
習慣沉默2017-05-16 13:06:35
http://redisdoc.com/string/in...
http://redisdoc.com/string/in...
Adakah pelaksanaan di dalam redis berbeza? Jika anda menggunakan incr untuk lulus parameter, anda perlu melaksanakan parameter masa yang ditentukan
Tetapi jika anda menggunakan incrby, anda hanya perlu melakukan satu pengiraan, jadi anda perlu mengesahkannya semula
PHPz2017-05-16 13:06:35
Selepas ujian, tiada perbezaan dapat dilihat, masa berjalan adalah sama, dan tiada incr dilaksanakan beberapa kali. Jika nombor 23000000000000000000000000000000000 dilaksanakan beberapa kali, ia pasti akan mengambil masa tertentu, tetapi ia akan mengambil masa yang sama seperti Incrbys