rdis那点事儿

有序集合和无序集合交/并集

$Redis = new Redis();
$Redis->connect(‘127.0.0.1’, 6379);
$Redis->select(5);

for ($i=1; $i<11; $i++) {
$Redis->sAdd(‘set:test’, $i);
}

for ($i=10; $i<21; $i++) {
R e d i s − > z A d d ( ′ z s e t : t e s t ′ , ( 100 + Redis->zAdd('zset:test', (100+ Redis>zAdd(zset:test,(100+i), $i);
}

for ($i=21; $i<31; $i++) {
R e d i s − > z A d d ( ′ z s e t : t e s t 2 ′ , ( 100 + Redis->zAdd('zset:test2', (100+ Redis>zAdd(zset:test2,(100+i), $i);
}

r e s u l t 1 = result1 = result1=Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’));//返回20
r e s u l t 2 = result2 = result2=Redis->zUnionStore(‘zset:union2’, array(‘set:test’, ‘zset:test’));//返回20
$result3 = $Redis->zInter(‘zset:inster1’, array(‘zset:test’, ‘set:test’));//返回1
$result4 = $Redis->zInter(‘zset:inster2’, array(‘set:test’, ‘zset:test’));//返回1

$result5 = $Redis->sUnionStore(‘set:union1’, ‘zset:test’, ‘set:test’);//不执行
$result6 = $Redis->sUnionStore(‘set:union2’, ‘set:test’, ‘zset:test’);//不执行
$result7 = $Redis->sinterstore(‘set:inster1’, ‘zset:test’, ‘set:test’);//不执行
$result8 = $Redis->sinterstore(‘set:inster2’, ‘set:test’, ‘zset:test’);//不执行

1、有序和无序集合的交并集操作,只能用有序集合的交并集方法进行,用无序集合的交并集方法不行,连返回值都没有,说明是方法不执行。

2、有序和无序集合的交并集后,无序集合的分是1(其实是给无序集合的元素加上分并赋值1,当有序集合用),双方都有的元素,它的分默认是相加。比如:元素10,它的分是110 + 1 = 111。

3、如果给有序集合的并集方法加乘法因子,则有多少个集合合并,就要有多少个乘法因子,否则方法不会执行,也不会报错。
不会执行,出现的结果有2种:1.之前结果集不存在的,则不会创建。2.之前有结果集的,则不会修改没变化,原先的值是什么,执行后还是什么。
例:$Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’, ‘zset:test2’), array(1, 3)); //方法不执行
$Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’, ‘zset:test2’), array(1, 3, 1));//方法执行

4、如果需要指定结果集的聚合方式,则也要指定乘法因子,否则会报错。
例:$Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’), ‘min’); //报错
$Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’), array(1, 1), ‘min’);//方法执行

——我们确实不需要改变乘法因子的,也要加上去,按默认值1加上去。
——第3、4点对有序集合的交并集方法都适用。
——用有序集合的交并集方法处理无序集合,会先把无序集合转成有序集合再进行处理;反过来,用无序集合的交并集方法处理有序集合,则不会先把有序集合转成无序集合再进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值