redis 集合(set)类型的使用和应用场景

redis是一个高速缓存的key-values数据库,它支持五种的数据类型,包括字符串类型(String)列表(list)、集合(set)、有序集合(zset)、哈希(hash)。下面我们来详细分析redis集合(set)类型的使用和应用场景。


一、redis集合(set)类型

redis集合(set)类型和list列表类型类似,都可以用来存储多个字符串元素的集合。但是和list不同的是set集合当中不允许重复的元素。而且set集合当中元素是没有顺序的,不存在元素下标。

redis的set类型是使用哈希表构造的,因此复杂度是O(1),它支持集合内的增删改查,并且支持多个集合间的交集、并集、差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。


二、redis set类型常用命令

1、SADD命令:将一个或者多个元素假如到集合当中,假如假如的元素已经存在在集合当中,则不会添加。假如key不存在,则直接参加一个key,并加入元素。命令如下:

sadd dbset oracle redis mysql

2、Redis Smembers 命令:将返回集合中的所有的成员。 命令如下:

Smembers dbset

Redis Smembers 命令

3、Redis Scard 命令:返回集合中元素的个数。命令如下:

Scard dbset

Redis Scard 命令

4、Sismember(查询) 命令:判断指定的值是否是集合的成员,假如不是集合的成员,或 key 不存在,返回 0 。命令如下:

sismember dbset oracle

Sismember(查询)

5、SREM(移除)命令:用于移除集合元素中一个或者多个元素,假如要移除的元素不存在,默认不处理。命令如下:(发现已经移除了oracle这个元素)

srem dbset oracle

SREM(移除)命令

6、Sinter(交集) 命令:返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集。具体命令如下:(重新再添加一个dbset1集合也是含有刚刚Oracle、redis、mysql 三个元素,然后取交集看下结果)

sinter dbset dbset1

Sinter(交集) 命令

7、sdiff(差集)命令:同理,返回指定集合之间的差集,命令如下:(对dbset再加入一个sqlserver元素,然后和dbset1求差集,看下结果)

sdiff dbset dbset1

sdiff(差集)命令

8、Sunion(并集) 命令:返回给定集合的并集。同理,不存在的集合 key 被视为空集。命令如下,看下dbset和dbaset1的并集的结果:

sunion dbaset dbset1

Sunion(并集) 命令

9、Sscan 命令:用于迭代集合中元素,取出匹配条件的元素,命令如下:

Sscan dbset 0 match  my*

Sscan 命令


三、redis set集合常用的应用场景

redis set是集合类型的数据结构,那么集合类型就比较适合用于聚合分类。

1、标签:比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并。

2、共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。

3、统计网站的独立IP。利用set集合当中元素不唯一性,可以快速实时统计访问网站的独立IP。