Redis学习_2_数据类型_4_set

set介绍与基本操作

set介绍

前面已经学过了string、hash、list三个数据类型,string是一个基本的数据类型,hash是底层是hash表的一个数据类型,list是双向链表结构,他们都有各自的优点,但也有不足的地方,比如我们要存大量数据,且要有快速查询的能力,这3个数据结构就不一定能排上用场了。
这个时候就要用到这次学习的数据结构:set。set其实底层也是一个hash表,存储结构和hash一样,但是,他的键值对里的值全部为nil,我们只用到键值对里面的值。
在这里插入图片描述

基本操作

  • 添加数据:sadd key member1 [member2 ...],如sadd users jam tom jack rose
  • 获取全部数据:smembers key,如smembers users
  • 删除数据:srem key member1 [member2 ...],如srem users jam
  • 获取集合数据总量:scard key,如scard users,这个命令和之前的数据类型不太一样,要区分开。
  • 判断集合中是否包含指定数据:sismember key member,如sismember users jam

set操作随机数据

  • 随机从集合中取出指定数量的数据:srandmember key [count],如srandmember users 2,如果没有指定数量,则默认取一个。
  • 随机取一个数据并移除set集合:spop key,如spop users

set数据交并差操作

  • 求集合的交集sinter key1 [key2 ...],如sinter users1 users2,注意,可以只传一个set集合,这样的结果就是这个set集合的所有数据,后面的命令同理。
  • 求集合的并集sunion key1 [key2 ...],如sunion users1 users2
  • 求集合的差集sdiff ke1 [key2 ...],如sdiff users1 users2,得到的结果是users1集合去掉和users2集合公共的数据。
  • 求集合的交集并存储到指定集合sinterstore destination key1 [key2 ...],如sinterstore users3 users1 users2,把users1和users2的交集存到users3中,如果之后又有其他类似的命令对users3赋值,那么这次保存的数据将被清空。
  • 求集合的并集并存储到指定集合sunionstore destination key1 [key2 ...],如sunionstore users3 users1 users2
  • 求集合的差集并存储到指定集合sdiffstore destination key1 [key2 ...],如sdiffstore users3 users1 users2
  • 将指定数据移动到别的集合:smove source destination member,如smove users1 users2 jam,把jam从users1移动到users2,移动后users1中将没有jam这个数据。

set的相关应用场景

随机信息推荐

现在很多应用都会有内容推荐的功能,如网易云音乐的私人FM,B站、知乎在首页也有推荐的内容,这些都是为了提高用户黏性,不断去推荐、发现用户感兴趣的内容。这其中,因为不知道用户准确的兴趣爱好所在,所以需要多尝试不同的内容,而这个内容可能是根据已有的数据得来的,也可能是在当前热门里随机推荐过来的。
如果是随即推荐的话,set就满足这个数据结构的要求,可以存储大量数据,查询数据快,支持随机取数。

关联信息搜索

像QQ、微信、微博等,都有推荐一些可能认识的用户,这些推荐的用户或多或少都与自己有一定的关联,如有多少个共同好友、有多少共同关注的公众号、有多少共同关注的大V等,他其实就是通过一些数据的交并差得到的,对于数据的交并差处理,set也满足这一要求。

用户的权限校验

现在很多系统,都分有用户和角色,不同的角色有不同的权限,而不同的用户又有不同的角色,可以是单个,也可以是多个。当用户登录系统时,具体这个用户具有哪些权限,可以进行哪些操作,我们都可以通过set的交并差数据处理来得到。当然,现在对于权限的控制,已经有很多很成熟的框架了,不需要单独再用redis来做,这里只是举例。

网站访问量统计

网站的访问量有以下几种

  • PV:网站被访问次数,刷新页面就可以提高。
  • UV:网站被不同用户访问的次数,可以通过cookie来统计,统一用户切换ip,UV不变。
  • IP:网站被不同IP访问的次数,可以通过IP地址来统计,相同IP不同用户访问,IP不变。
    对于PV,我们用string的incr命令就行,对于UV、IP我们可以利用set的不重复的特性,比如对于UV,我们只存用户的cookie,访问多次在set里也只有一个数据。

黑白名单

黑白名单和上面的网站访问量相同,对于同一个加入黑/白名单的用户,我们只记录一次,利用到set的数据不重复以及可以判断数据是否存在的特性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值