在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
集合类型介绍 集合类型也是体现redis一个比较高价值的一个类型了。因为Redis的集合类型,所以我们可以很容易的在Redis中执行差集运算、交集运算、并集运算。 首先我们先介绍一下集合类型和列表类型的区别,其实学过面向对象的语言的同学应该都能猜到这些类型有什么不同。 ①集合类型和列表类型还是都能存储2^32-1个字符串 ②集合类型是无序的,列表类型是有序的 ③集合类型是唯一的,列表类型的值是不唯一的 下面我们一起来看一下语法。 1、增加删除元素命令 sadd key member [member ...] srem key member [member ...]
2、获得集合中的所有元素 smembers key 3、判断元素是否在集合中 sismember key member 这个判断操作的时间复杂度是O(1),无论集合中的元素有多少,这个命令始终都很很快的返回结果。存在返回1,不存在或没有这个键的时候都返回0 。 4、集合间运算 sdiff key [key ...] sinter key [key ...] sunion key [key ...] 这三个命令才能使Redis大显身手! 我们先准备点测试数据。 127.0.0.1:6379> sadd setA 1 2 3 (integer) 3 127.0.0.1:6379> sadd setB 2 3 4 (integer) 3 127.0.0.1:6379> sadd setC 3 4 5 (integer) 3 127.0.0.1:6379> smembers setA 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> (1)下面我们来介绍 集合A与集合B的差值运算表示为A-B,代表所有属于A且不属于B的元素构成的集合。这个命令同时支持传入多个键,意思是A与B先做差集运算,然后结果再与C做差集运算。 127.0.0.1:6379> sdiff setA setB 1) "1" 127.0.0.1:6379> sdiff setB setC 1) "2" 127.0.0.1:6379> sdiff setA setB setC 1) "1" (2)接下来我们介绍 127.0.0.1:6379> sinter setA setB 1) "2" 2) "3" 127.0.0.1:6379> sinter setA setB setC 1) "3" (3)最后我们介绍并集运算命令 127.0.0.1:6379> sunion setA setB 1) "1" 2) "2" 3) "3" 4) "4" 127.0.0.1:6379> sunion setA setB setC 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 5、获得集合中元素的个数 scard key 127.0.0.1:6379> scard setA (integer) 3 127.0.0.1:6379> scard setB (integer) 3 这条命令用来获取集合中元素的个数。同样集合不存在返回0 。 6、进行集合运算并将结果存储 sdiffstore destination key [key ...] sinterstore destination key [key ...] sunionstore destination key [key ...] 这里在所有的集合命令之后加了个 例: 127.0.0.1:6379> sunionstore setAll setA setB setC (integer) 5 127.0.0.1:6379> smembers setAll 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 7、随机获得集合中的元素 srandmember key [count]
这个命令用来随机从集合中获取一个元素,count参数用来一词获取多个元素,根据count的正负有不同的意义。 (1)当count为正数时,获取count个不重复的元素,如果count大于所有值的个数,则返回全部元素。 (2)负值时,获得|count|个元素,但有可能相同。 其实这个随机并不是非常随机,因为实际上redis的集合用的是散列的存储结构,有兴趣的读者可以自己深入研究一下。 127.0.0.1:6379> srandmember setA 1 1) "1" 127.0.0.1:6379> srandmember setA 2 1) "3" 2) "2" 127.0.0.1:6379> SRANDMEMBER setA 5 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> SRANDMEMBER setA -2 1) "3" 2) "3" 8、从集合中弹出一个元素 spop key 之前我们也看过lpop与rpop,那是从列表中弹出,但是集合是无序的,所以spop是随机弹出。 (弹出的元素被删除,不在原来的集合中) 127.0.0.1:6379> spop setA 1 1) "2" 127.0.0.1:6379> smembers setA 1) "1" 2) "3" 下面我们来举例一个集合的具体应用。 在我们文章存储的时候有个标签tag,这个我们在关系数据库的时候都需要使用中间表关联。但是在Redis中,我们可以很方便的处理。 对每篇文章,我们使用一个post:文章 有时候我们还需要获取指定标签的所有文章,我们还需要增加一类的键,即tag:标签名称 而在我们想要获取比如同时属于java和redis标签的文章时,我们只需要对 总结 以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。 |
请发表评论