@@ -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