@@ -51,6 +51,7 @@ static zend_function_entry redis_functions[] = {
5151 PHP_ME (Redis , ping , NULL , ZEND_ACC_PUBLIC )
5252 PHP_ME (Redis , get , NULL , ZEND_ACC_PUBLIC )
5353 PHP_ME (Redis , set , NULL , ZEND_ACC_PUBLIC )
54+ PHP_ME (Redis , setex , NULL , ZEND_ACC_PUBLIC )
5455 PHP_ME (Redis , setnx , NULL , ZEND_ACC_PUBLIC )
5556 PHP_ME (Redis , getSet , NULL , ZEND_ACC_PUBLIC )
5657 PHP_ME (Redis , randomKey , NULL , ZEND_ACC_PUBLIC )
@@ -461,8 +462,51 @@ PHP_METHOD(Redis, set)
461462 redis_boolean_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL TSRMLS_CC );
462463 }
463464 REDIS_PROCESS_RESPONSE (redis_boolean_response );
465+ }
466+
467+ /* {{{ proto boolean Redis::setex(string key, long expire, string value)
468+ */
469+ PHP_METHOD (Redis , setex )
470+ {
471+ zval * object ;
472+ RedisSock * redis_sock ;
473+ char * key = NULL , * val = NULL , * cmd ;
474+ int key_len , val_len , cmd_len ;
475+ long expire ;
476+
477+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Osls" ,
478+ & object , redis_ce , & key , & key_len ,
479+ & expire , & val , & val_len ) == FAILURE ) {
480+ RETURN_FALSE ;
481+ }
464482
483+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
484+ RETURN_FALSE ;
485+ }
465486
487+ cmd_len = redis_cmd_format (& cmd ,
488+ "*4" _NL
489+ "$5" _NL
490+ "SETEX" _NL
491+
492+ "$%d" _NL /* key_len */
493+ "%s" _NL /* key */
494+
495+ "$%d" _NL /* expire_len */
496+ "%d" _NL /* expire */
497+
498+ "$%d" _NL /* val_len */
499+ "%s" _NL /* val */
500+
501+ , key_len , key , key_len
502+ , integer_length (expire ), expire
503+ , val_len , val , val_len );
504+
505+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
506+ IF_ATOMIC () {
507+ redis_boolean_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL TSRMLS_CC );
508+ }
509+ REDIS_PROCESS_RESPONSE (redis_boolean_response );
466510}
467511
468512/* {{{ proto boolean Redis::setnx(string key, string value)
0 commit comments