mirror of
https://github.com/phpredis/phpredis.git
synced 2026-06-19 07:35:31 +00:00
Minor session compression cleanup.
* We can compress without the need for sepearate buffers. * Allow both "" and "none" to mean "none" in terms of redis.session.compression.
This commit is contained in:
committed by
Michael Grunder
parent
dc39bd55a0
commit
2b555c89ef
+21
-21
@@ -142,22 +142,23 @@ static int session_gc_maxlifetime(void) {
|
||||
|
||||
/* Retrieve redis.session.compression from php.ini */
|
||||
static int session_compression_type(void) {
|
||||
const char *compression = INI_STR("redis.session.compression");
|
||||
#ifdef HAVE_REDIS_LZF
|
||||
if(strncasecmp(INI_STR("redis.session.compression"), "lzf", sizeof("lzf") - 1) == 0) {
|
||||
if(strncasecmp(compression, "lzf", sizeof("lzf") - 1) == 0) {
|
||||
return REDIS_COMPRESSION_LZF;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_REDIS_ZSTD
|
||||
if(strncasecmp(INI_STR("redis.session.compression"), "zstd", sizeof("zstd") - 1) == 0) {
|
||||
if(strncasecmp(compression, "zstd", sizeof("zstd") - 1) == 0) {
|
||||
return REDIS_COMPRESSION_ZSTD;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_REDIS_LZ4
|
||||
if(strncasecmp(INI_STR("redis.session.compression"), "lz4", sizeof("lz4") - 1) == 0) {
|
||||
if(strncasecmp(compression, "lz4", sizeof("lz4") - 1) == 0) {
|
||||
return REDIS_COMPRESSION_LZ4;
|
||||
}
|
||||
#endif
|
||||
if(strncasecmp(INI_STR("redis.session.compression"), "none", sizeof("none") - 1) == 0) {
|
||||
if(*compression == '\0' || strncasecmp(compression, "none", sizeof("none") - 1) == 0) {
|
||||
return REDIS_COMPRESSION_NONE;
|
||||
}
|
||||
|
||||
@@ -185,7 +186,7 @@ session_compress_data(RedisSock *redis_sock, char *data, size_t len,
|
||||
}
|
||||
|
||||
/* Helper to uncompress session data */
|
||||
static int
|
||||
static int
|
||||
session_uncompress_data(RedisSock *redis_sock, char *data, size_t len,
|
||||
char **decompressed_data, size_t *decompressed_len) {
|
||||
if (redis_sock->compression) {
|
||||
@@ -817,10 +818,11 @@ PS_READ_FUNC(redis)
|
||||
*/
|
||||
PS_WRITE_FUNC(redis)
|
||||
{
|
||||
char *cmd, *response, *compressed_buf = NULL;
|
||||
int cmd_len, response_len, compressed_free = 0;
|
||||
const char *skey = ZSTR_VAL(key), *sval = ZSTR_VAL(val);
|
||||
size_t skeylen = ZSTR_LEN(key), svallen = ZSTR_LEN(val), compressed_len = 0;
|
||||
char *cmd, *response;
|
||||
int cmd_len, response_len, compressed_free;
|
||||
const char *skey = ZSTR_VAL(key);
|
||||
size_t skeylen = ZSTR_LEN(key), svallen = ZSTR_LEN(val);
|
||||
char *sval;
|
||||
|
||||
if (!skeylen) return FAILURE;
|
||||
|
||||
@@ -835,14 +837,13 @@ PS_WRITE_FUNC(redis)
|
||||
/* send SET command */
|
||||
zend_string *session = redis_session_key(redis_sock, skey, skeylen);
|
||||
|
||||
compressed_free = session_compress_data(redis_sock, ZSTR_VAL(val), ZSTR_LEN(val), &compressed_buf, &compressed_len);
|
||||
sval = compressed_buf;
|
||||
svallen = compressed_len;
|
||||
|
||||
compressed_free = session_compress_data(redis_sock, ZSTR_VAL(val), ZSTR_LEN(val),
|
||||
&sval, &svallen);
|
||||
|
||||
cmd_len = REDIS_SPPRINTF(&cmd, "SETEX", "Sds", session, session_gc_maxlifetime(), sval, svallen);
|
||||
zend_string_release(session);
|
||||
if (compressed_free) {
|
||||
efree(compressed_buf);
|
||||
efree(sval);
|
||||
}
|
||||
|
||||
if (!write_allowed(redis_sock, &pool->lock_status)) {
|
||||
@@ -1281,14 +1282,13 @@ PS_READ_FUNC(rediscluster) {
|
||||
PS_WRITE_FUNC(rediscluster) {
|
||||
redisCluster *c = PS_GET_MOD_DATA();
|
||||
clusterReply *reply;
|
||||
char *cmd, *skey, *compressed_buf = NULL, *sval = ZSTR_VAL(val);
|
||||
int cmdlen, skeylen, compressed_free = 0, svallen = ZSTR_LEN(val);
|
||||
char *cmd, *skey, *sval;
|
||||
int cmdlen, skeylen, compressed_free;
|
||||
size_t svallen;
|
||||
short slot;
|
||||
size_t compressed_len = 0;
|
||||
|
||||
compressed_free = session_compress_data(c->flags, sval, svallen, &compressed_buf, &compressed_len);
|
||||
sval = compressed_buf;
|
||||
svallen = compressed_len;
|
||||
compressed_free = session_compress_data(c->flags, ZSTR_VAL(val), ZSTR_LEN(val),
|
||||
&sval, &svallen);
|
||||
|
||||
/* Set up command and slot info */
|
||||
skey = cluster_session_key(c, ZSTR_VAL(key), ZSTR_LEN(key), &skeylen, &slot);
|
||||
@@ -1297,7 +1297,7 @@ PS_WRITE_FUNC(rediscluster) {
|
||||
sval, svallen);
|
||||
efree(skey);
|
||||
if (compressed_free) {
|
||||
efree(compressed_buf);
|
||||
efree(sval);
|
||||
}
|
||||
|
||||
/* Attempt to send command */
|
||||
|
||||
Reference in New Issue
Block a user