对set数据的操作
set类型是string类型的集合,其特点是集合元素无序且不重复,每个集合最多可以存储 232 - 1 个元素(40多亿),set类型主要有以下应用场景。
- 好友/关注/粉丝/感兴趣的人集合
set类型唯一的特点使得其适合用于存储好友/关注/粉丝/感兴趣的人集合,集合中的元素数量可能很多,每次全部取出来成本不小,set类型提供了一些很实用的命令用于直接操作这些集合,如
a. sinter命令可以获得A和B两个用户的共同好友
b. sismember命令可以判断A是否是B的好友
c. scard命令可以获取好友数量
d. 关注时,smove命令可以将B从A的粉丝集合转移到A的好友集合- 随机展示
set类型适合存放所有需要展示的内容,而srandmember命令则可以从中随机获取几个。- 黑名单/白名单
经常有业务出于安全性方面的考虑,需要设置用户黑名单、ip黑名单、设备黑名单等,set类型适合存储这些黑名单数据,sismember命令可用于判断用户、ip、设备是否处于黑名单之中
demo
#demo1 展示好友和自己的共同好友的集合
$redis->flushAll();
$redis->sadd('my','a','b','c');
$redis->sAdd('myfriends','c','b','e');
var_dump($redis->sinter('my','myfriends')); #展示两个key之间共有的元素
#demo2 黑名单,白名单
$redis->sadd('myBlacklist','a','b');
$flag = $redis->sismember('myBlacklist','a');
echo $flag?1:0;
php操作set
#创建
#添加一个或多个元素到集合中
$redis->sadd('set','a','b');
#获取
#返回集合中所有的元素
$redis->smembers('set');
#获取两个或两个以上集合的交集
$redis->sinter('set','set1','set2');
#获取两个或两个以上集合的并集
$redis->sunion('set','set1','set2');
#获取两个或者两个以上集合的差集
$redis->sdiff('set','set1','set2');
#删除
#删除一个或多个集合中的元素
$redis->srem('set','a','b');
#随机移除一个元素,并返回移除的元素
$redis->spop('set');
#将set的一个元素(a)移动到set1集合中去
$redis->smove('set','set1','a');
#判断元素是否是在指定集合中
$redis->sismember('set','a');