Redis 交换两个key的值,保证原子性,管道事务都不符合要求。
只能使用lua脚本。简单代码,真实会着不难,难者不会。
define('API_PATH', str_replace('\\', '/',dirname(__FILE__)) . '/');
require API_PATH.'inc/cls_redis.php'; //引入cls_redis文件
$rd_obj = new \redis\cls_redis(3); //初始redis对象 并进入分片
$redis=$rd_obj::$redis; //传递静态变量里面的操作句柄
$redis->set('k1',500);
$redis->set('k2',300);
$lua = <<<SCRIPT
local kws = {}
kws = redis.call('get',KEYS[1])
kws = redis.call('getset',KEYS[2],kws)
kws = redis.call('set',KEYS[1],kws)
SCRIPT;
$redis->eval($lua,array('k1','k2'),2);
cls_redis.php 请参考我的另一篇文章
一个改进redis操作类,支持多维数组