美文网首页
Redis集合

Redis集合

作者: lc_666 | 来源:发表于2020-04-22 17:36 被阅读0次
  • 集合类型 Set 是一个无序并唯一的键值集合。
  • 它的存储顺序不会按照插入的先后顺序进行存储。

同列表的区别

  • 列表可以存储重复元素,集合只能存储非重复元素;
  • 列表是按照元素的先后顺序存储元素的,而集合则是无序方式存储元素的;

redis-cli使用

  • 添加一个或多个元素/查询集合所有元素
127.0.0.1:6379> sadd like Anna Bob Bob Cat
(integer) 3
127.0.0.1:6379> smembers like
1) "Anna"
2) "Bob"
3) "Cat"
  • 查询集合元素数量
127.0.0.1:6379> scard like
(integer) 3
  • 查询集合中是否包含某元素
127.0.0.1:6379> sismember like Anna
(integer) 1
127.0.0.1:6379> sismember like John
(integer) 0
  • 从一个集合中移动一个元素到另一个集合
127.0.0.1:6379> smembers like
1) "Anna"
2) "Bob"
3) "Cat"
127.0.0.1:6379> smembers dislike
1) "Lee"
2) "Mary"
3) "Sasike"
127.0.0.1:6379> smove like dislike Cat
(integer) 1
127.0.0.1:6379> smembers like
1) "Anna"
2) "Bob"
127.0.0.1:6379> smembers dislike
1) "Lee"
2) "Mary"
3) "Cat"
4) "Sasike"
  • 移除集合中一个或者多个元素, 不存在的元素将会被忽略
127.0.0.1:6379> smembers dislike
1) "Lee"
2) "Mary"
3) "Cat"
4) "Sasike"
127.0.0.1:6379> srem dislike Lee Cat
(integer) 2
127.0.0.1:6379> smembers dislike
1) "Mary"
2) "Sasike"

使用Jedis操作Set

public class RedisSet {
    public static void main(String[] args) {
        Jedis redis = ConnectRedis.getRedis();
        Set<String> dislike = redis.smembers("dislike");
        System.out.println(dislike);
        redis.sadd("dislike","Hinata","Sakura","Gala");
        dislike=redis.smembers("dislike");
        System.out.println(dislike);
    }
}

集合实现

  • 当所有元素都为整数时,集合会以 intset 结构进行(数据)存储;
  • 当元素为非整数时,集合会使用 hashtable 进行存储;

使用场景

  • 微博关注我的人和我关注的人都适合用集合存储,可以保证人员不会重复;
  • 中奖人信息也适合用集合类型存储,这样可以保证一个人不会重复中奖;

更多操作命令

  • 移除并返回集合中的一个随机元素
127.0.0.1:6379> smembers dislike
1) "Sakura"
2) "Mary"
3) "Hinata"
4) "Sasike"
5) "Gala"
127.0.0.1:6379> spop dislike 1
1) "Sakura"
127.0.0.1:6379> spop dislike 1
1) "Hinata"
127.0.0.1:6379> smembers dislike
1) "Gala"
2) "Mary"
3) "Sasike"
  • 随机返回集合中指定数量的元素列表
127.0.0.1:6379> smembers dislike
1) "Gala"
2) "Mary"
3) "Sasike"
127.0.0.1:6379> srandmember dislike 2
1) "Mary"
2) "Gala"
  • 返回一个集合或多个集合的交集
127.0.0.1:6379> sadd set1 a b c d e 
(integer) 5
127.0.0.1:6379> sadd set2 a b f g h
(integer) 5
127.0.0.1:6379> sinter set1 set2
1) "a"
2) "b"
  • 把集合的交集复制到新的集合中
127.0.0.1:6379> sadd set1 a b c d e 
(integer) 5
127.0.0.1:6379> sadd set2 a b f g h
(integer) 5
127.0.0.1:6379> sinterstore set3 set1 set2
(integer) 2
127.0.0.1:6379> smembers set3
1) "a"
2) "b"
  • 查询一个或者多个集合的并集
127.0.0.1:6379> sunion set1 set2
1) "b"
2) "h"
3) "g"
4) "f"
5) "d"
6) "a"
7) "e"
8) "c"
  • 查询一个或者多个集合的并集并存储
127.0.0.1:6379> sunionstore set4 set1 set2
    (integer) 8
    127.0.0.1:6379> smembers set4
    1) "b"
    2) "h"
    3) "g"
    4) "f"
    5) "d"
    6) "a"
    7) "e"
    8) "c"
  • 查询一个或者多个集合的错集
127.0.0.1:6379> smembers set1
1) "d"
2) "a"
3) "c"
4) "b"
5) "e"
127.0.0.1:6379> smembers set2
1) "b"
2) "h"
3) "f"
4) "g"
5) "a"
127.0.0.1:6379> sdiff set1 set2
1) "d"
2) "e"
3) "c"
  • 查询一个或者多个集合的错集并存储
127.0.0.1:6379> sdiffstore set5 set1 set2
(integer) 3
127.0.0.1:6379> smembers set5
1) "d"
2) "e"
3) "c"

相关文章

网友评论

      本文标题:Redis集合

      本文链接:https://www.haomeiwen.com/subject/kcswihtx.html