php - Redis中incr与incrBy的区别
PHP中文网
PHP中文网 2017-05-16 13:04:35
0
4
1106

我看网上说他们的区别

但我自己试了下,发现incr也可以像incrby那样指定增加量,这样感觉这就没区别了啊,下图是我测试的结果.

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(4)
阿神

Ce qui suit est le code source de Redis. En fait, l'implémentation sous-jacente de incr et incrBy est cohérente, mais incrBy doit effectuer une vérification des paramètres

//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);
}

On peut voir d'ici que incr ne prend pas en charge les paramètres numériques.

Mais pourquoi $redis est-il pris en charge en PHP ? Peut-être que la couche inférieure de cette bibliothèque utilise la commande incrBy de redis

Peter_Zhu

Le code source a été mal publié tout à l'heure, veuillez le modifier


En parcourant le code source de l'extension phpredis, elle devrait être compatible à partir de la 2.0.9.

Lorsque vous appelez incr, apportez éventuellement un numéro de type long. Si le numéro n'est pas 1, appelez incrby.

À propos, lors de l'utilisation de incrBy, si le paramètre suivant est 1, incr sera appelé.

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);
    }
}
習慣沉默

http://redisdoc.com/string/in...
http://redisdoc.com/string/in...
L'exécution à l'intérieur de Redis est-elle différente ? Si vous utilisez incr pour transmettre des paramètres, vous devez exécuter les heures spécifiées par le paramètre
Mais si vous utilisez incrby, vous n'avez besoin d'effectuer qu'un seul calcul, vous devez donc le confirmer à nouveau

PHPzhong

Après les tests, aucune différence n'est visible, la durée d'exécution est la même et aucune augmentation n'est exécutée plusieurs fois. Si le nombre 230000000000000000000000000000 est exécuté plusieurs fois, cela prendra certainement un certain temps, mais cela prendra le même temps qu'IncrBys

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!