redis计算集合的交/并/差集

require_once '../../CacheRedis.php';

$server = '127.0.0.1:6379';
$redis = CacheRedis::getInstance($server);

$key1 = 'set:1';
$key2 = 'set:2';
$key3 = 'set:3';

$res = $redis->sAdd($key1, 1, 2, 3, 4);
$res = $redis->sAdd($key2, 2, 3, 4);
$res = $redis->sAdd($key3, 3, 4, 5, 6);
$redis->expire($key1, 5);
$redis->expire($key2, 5);
$redis->expire($key3, 5);

// 集合间操作

// sinter: 求多个集合的交集
$res = $redis->sInter($key1, $key2, $key3);
var_dump($res);

// sunion: 求多个集合的并集
$res = $redis->sUnion($key1, $key2, $key3);
var_dump($res);

// sdiff: 求多个集合的差集(第一个集合 - 其他集合, 也就说,结果是返回第一个集合中特有的元素)
$res = $redis->sDiff($key1, $key2, $key3);
var_dump($res);

$key1_store = 'set:s:1';
// sinterstore: 计算交集并将结果保存 ps: sUnionStore sDiffStore
$res = $redis->sInterStore($key1_store, $key1, $key2, $key3);
var_dump($res);
$res = $redis->sMembers($key1_store);
var_dump($res);

// ps: 集合间的运算都比较耗时,所以,在数据量非常大的情况下,一般都是异步使用(脚本预热数据等方式), 使用store命令将结果缓存下来,使用的时候不需要实时计算,直接从缓存中取

推荐: redis基础&实战教程

0 评论
最新
最旧 最多投票
内联反馈
查看所有评论
滚动至顶部