Implement GETDEL for RedisCluster

Fixes #2629
This commit is contained in:
michael-grunder
2025-03-06 08:53:21 -08:00
committed by Michael Grunder
parent 36ab585039
commit d342e4ac18
5 changed files with 28 additions and 2 deletions

View File

@@ -287,6 +287,12 @@ PHP_METHOD(RedisCluster, get) {
}
/* }}} */
/* {{{ proto string RedisCluster::getdel(string key) */
PHP_METHOD(RedisCluster, getdel) {
CLUSTER_PROCESS_KW_CMD("GETDEL", redis_key_cmd, cluster_bulk_resp, 1);
}
/* }}} */
/* {{{ proto array|false RedisCluster::getWithMeta(string key) */
PHP_METHOD(RedisCluster, getWithMeta) {
redisCluster *c = GET_CONTEXT();

View File

@@ -390,6 +390,11 @@ class RedisCluster {
*/
public function get(string $key): mixed;
/**
* @see Redis::getdel
*/
public function getdel(string $key): mixed;
/**
* @see Redis::getWithMeta
*/

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 5966b99fd578eca94880e09539542edfbcbcdaed */
* Stub hash: 43a43fa735ced4b48a361078ac8a10fb62cb1244 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 1)
@@ -325,6 +325,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_RedisCluster_get, 0, 1, IS
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_getdel arginfo_class_RedisCluster_get
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_RedisCluster_getWithMeta, 0, 1, RedisCluster, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
ZEND_END_ARG_INFO()
@@ -1129,6 +1131,7 @@ ZEND_METHOD(RedisCluster, georadiusbymember_ro);
ZEND_METHOD(RedisCluster, geosearch);
ZEND_METHOD(RedisCluster, geosearchstore);
ZEND_METHOD(RedisCluster, get);
ZEND_METHOD(RedisCluster, getdel);
ZEND_METHOD(RedisCluster, getWithMeta);
ZEND_METHOD(RedisCluster, getex);
ZEND_METHOD(RedisCluster, getbit);
@@ -1359,6 +1362,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
ZEND_ME(RedisCluster, geosearch, arginfo_class_RedisCluster_geosearch, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, geosearchstore, arginfo_class_RedisCluster_geosearchstore, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, get, arginfo_class_RedisCluster_get, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, getdel, arginfo_class_RedisCluster_getdel, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, getWithMeta, arginfo_class_RedisCluster_getWithMeta, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, getex, arginfo_class_RedisCluster_getex, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, getbit, arginfo_class_RedisCluster_getbit, ZEND_ACC_PUBLIC)

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 5966b99fd578eca94880e09539542edfbcbcdaed */
* Stub hash: 43a43fa735ced4b48a361078ac8a10fb62cb1244 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster___construct, 0, 0, 1)
ZEND_ARG_INFO(0, name)
@@ -295,6 +295,8 @@ ZEND_END_ARG_INFO()
#define arginfo_class_RedisCluster_get arginfo_class_RedisCluster__prefix
#define arginfo_class_RedisCluster_getdel arginfo_class_RedisCluster__prefix
#define arginfo_class_RedisCluster_getWithMeta arginfo_class_RedisCluster__prefix
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RedisCluster_getex, 0, 0, 1)
@@ -971,6 +973,7 @@ ZEND_METHOD(RedisCluster, georadiusbymember_ro);
ZEND_METHOD(RedisCluster, geosearch);
ZEND_METHOD(RedisCluster, geosearchstore);
ZEND_METHOD(RedisCluster, get);
ZEND_METHOD(RedisCluster, getdel);
ZEND_METHOD(RedisCluster, getWithMeta);
ZEND_METHOD(RedisCluster, getex);
ZEND_METHOD(RedisCluster, getbit);
@@ -1201,6 +1204,7 @@ static const zend_function_entry class_RedisCluster_methods[] = {
ZEND_ME(RedisCluster, geosearch, arginfo_class_RedisCluster_geosearch, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, geosearchstore, arginfo_class_RedisCluster_geosearchstore, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, get, arginfo_class_RedisCluster_get, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, getdel, arginfo_class_RedisCluster_getdel, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, getWithMeta, arginfo_class_RedisCluster_getWithMeta, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, getex, arginfo_class_RedisCluster_getex, ZEND_ACC_PUBLIC)
ZEND_ME(RedisCluster, getbit, arginfo_class_RedisCluster_getbit, ZEND_ACC_PUBLIC)

View File

@@ -654,6 +654,13 @@ class Redis_Test extends TestSuite {
$this->assertEquals('123', $this->redis->getSet('key', '123'));
}
public function testGetDel() {
$this->redis->del('key');
$this->assertTrue($this->redis->set('key', 'iexist'));
$this->assertEquals('iexist', $this->redis->getDel('key'));
$this->assertEquals(0, $this->redis->exists('key'));
}
public function testRandomKey() {
for ($i = 0; $i < 1000; $i++) {
$k = $this->redis->randomKey();