8000 Optimise constructing Redis command string · phpredis/phpredis@2a2f908 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2a2f908

Browse files
JakubOnderkamichael-grunder
authored andcommitted
Optimise constructing Redis command string
Instead of snprintf method, use zend_print_long_to_buf that can be inlined
1 parent 5156e03 commit 2a2f908

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

library.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1044,18 +1044,17 @@ int redis_cmd_append_sstr(smart_string *str, char *append, int append_len) {
10441044
* Append an integer to a smart string command
10451045
*/
10461046
int redis_cmd_append_sstr_int(smart_string *str, int append) {
1047-
char int_buf[32];
1048-
int int_len = snprintf(int_buf, sizeof(int_buf), "%d", append);
1049-
return redis_cmd_append_sstr(str, int_buf, int_len);
1047+
return redis_cmd_append_sstr_long(str, (long) append);
10501048
}
10511049

10521050
/*
10531051
* Append a long to a smart string command
10541052
*/
10551053
int redis_cmd_append_sstr_long(smart_string *str, long append) {
10561054
char long_buf[32];
1057-
int long_len = snprintf(long_buf, sizeof(long_buf), "%ld", append);
1058-
return redis_cmd_append_sstr(str, long_buf, long_len);
1055+
char *result = zend_print_long_to_buf(long_buf + sizeof(long_buf) - 1, append);
1056+
int int_len = long_buf + sizeof(long_buf) - 1 - result;
1057+
return redis_cmd_append_sstr(str, result, int_len);
10591058
}
10601059

10611060
/*
@@ -3937,10 +3936,15 @@ redis_serialize(RedisSock *redis_sock, zval *z, char **val, size_t *val_len)
39373936
break;
39383937

39393938
default: { /* copy */
3940-
zend_string *zstr = zval_get_string(z);
3939+
zend_string *zstr = zval_get_string_func(z);
3940+
if (ZSTR_IS_INTERNED(zstr)) { // do not reallocate interned strings
3941+
*val = ZSTR_VAL(zstr);
3942+
*val_len = ZSTR_LEN(zstr);
3943+
return 0;
3944+
}
39413945
*val = estrndup(ZSTR_VAL(zstr), ZSTR_LEN(zstr));
39423946
*val_len = ZSTR_LEN(zstr);
3943-
zend_string_release(zstr);
3947+
zend_string_efree(zstr);
39443948
return 1;
39453949
}
39463950
}

0 commit comments

Comments
 (0)
0