zoukankan      html  css  js  c++  java
  • Redis自学笔记:3.5入门-集合类型

    3.5集合类型

    3.5.1介绍

    • 在集合中的每个元素都是不同的,且没有顺序
      表3-4集合类型和列表类型的对比
    - 集合类型 列表类型
    存储内容 至多232-1个字符串 至多232-1个字符串
    有序性
    唯一性
    • 集合类型在redis内部是使用值为空的散列表实现的,所有这些操作的
      事件复杂度都是O(I)

    3.5.2命令

    1. 增加/删除元素
      sadd key member [member ...]
      向集合中增加元素,如果键不存在会自动创建

      • 如果加入的元素已经存在域集合,就会忽略这个元素
        返回值是成功加入元素数量

      srem key member [member ...]
      用来从集合删除元素
      返回值是删除成功的个数

    2. 获得集合中的所有元素:smembers key

    3. 判断元素是否在集合:sismember key member

      127.0.0.1:6379> sadd 江湖 张无忌
      1
      127.0.0.1:6379> sadd 江湖 赵敏 周芷若
      2
      127.0.0.1:6379> smembers 江湖
      赵敏
      张无忌
      周芷若
      127.0.0.1:6379> srem 江湖 周芷若
      1
      127.0.0.1:6379> sismember 江湖 周芷若
      0
      
    4. 集合间运算
      sdiff key1 [key2 key3 ,,]
      多个集合执行差集运算

      • 两个集合: key1的值 - key2的值
      • 三个集合: (key1的值 -key2的值) - key3的值
      127.0.0.1:6379> sadd 武林 张无忌 张三丰 杨逍 赵敏
      4
      127.0.0.1:6379> sadd 江湖 周芷若 张无忌 赵敏 
      3
      127.0.0.1:6379> sdiff 江湖 武林
      周芷若
      127.0.0.1:6379> sdiff 武林 江湖
      张三丰
      杨逍
      127.0.0.1:6379> sadd 武当 张三丰 张无忌
      2
      127.0.0.1:6379> sdiff 武林 江湖 武当 
      杨逍
      

      sinter key [key ,,]
      对多个集合执行交集运算

      127.0.0.1:6379> sinter 江湖 武林
      赵敏
      张无忌
      127.0.0.1:6379> sinter 江湖 武林 武当
      张无忌
      

      sunion key [key ,,]
      对多个集合执行并集运算

      127.0.0.1:6379> sunion 江湖 武林
      周芷若
      张无忌
      赵敏
      杨逍
      张三丰
      

    3.5.3实践

    1. 存储文章标签
      文章的所有标签互不相同,且对排序没有要求
      对每篇文章使用键名为post:文章ID:tags的键存储该文章的标签
      伪代码:

      # 给ID为42的文章增加标签
      sadd post:42:tags,闲言碎语,技术文章,java
      # 删除标签
      srem post:42:tags,闲言碎语
      # 显示所有的标签
      $tags = smembers post:42:tags
      print $tags
      
      • 使用集合类型键存储标签适合需要单独增加或删除标签的场合
    2. 通过标签搜索文章
      列出某个标签下的所有文章,甚至需要获得属于几个标签的文章列表
      现有3张表
      表3-5 posts表结构

      字段名 说明
      post_id 文章ID
      post_title 文章标题

      表3-6 tags表结构

      字段名 说明
      tag_id 标签ID
      tag_name 标签名称

      表3-7 posts_tags表结构

      字段名 说明
      post_id 对应的文章ID
      tag_id 对应的标签ID

      图3-18和标签有关部分的存储结构

      集合值
      post:1:tags java
      post:2:tags java mysql
      post:3:tags java mysql redis
      tag:redis:posts 3
      tag:mysql:posts 2 3
      tag:java:posts 1 2 3

      当需要获取'mysql'标签的文章,只需要使用命令
      smembers tag:mysql:posts
      如果要实现找到同时须臾java,mysql,redis的文章,
      将其三个键取并集

    3.5.4命令拾遗

    1. 获得集合中元素的个数:scard key
      127.0.0.1:6379> sadd foo 1 2 3 4 5
      5
      127.0.0.1:6379> scard foo
      5
      
    2. 进行集合运算并将结果存储
      sdiffstore destination key [key ...]
      sinterstore destination key [key ...]
      sunionstore destination key [key ...]
      127.0.0.1:6379> sadd bar 1 3 5 7 9
      5
      127.0.0.1:6379> sdiffstore baz foo bar
      2
      127.0.0.1:6379> smembers baz
      2
      4
      127.0.0.1:6379> sinterstore baz foo bar
      3
      127.0.0.1:6379> smembers baz
      1
      3
      5
      127.0.0.1:6379> sunionstore baz foo bar
      7
      127.0.0.1:6379> smembers baz
      1
      2
      3
      4
      5
      7
      9
      
    3. 随机获得集合中元素:srandmember key [count]
      • count为正数时,从集合中获取count个不重复元素
        如果count大于集合元素,则返回集合所有元素
      • count为负数时,从集合中获取|count|个元素,
        这些元素有可能重复
      127.0.0.1:6379> sadd foo book look good
      3
      127.0.0.1:6379> srandmember foo
      book
      127.0.0.1:6379> srandmember foo 2
      book
      look
      127.0.0.1:6379> srandmember foo 5
      book
      look
      good
      127.0.0.1:6379> srandmember foo -5
      book
      look
      book
      book
      look
      
    4. 从集合中弹出一个元素:spop key
      127.0.0.1:6379>  spop foo
      book
      127.0.0.1:6379> smembers foo
      good
      look
      
  • 相关阅读:
    嘿嘿...World Cup 2006!
    打开指定的access数据库
    微软的好东东:Slideshow Generator Powertoy for Windows XP
    大地诗景:银川 (转载)
    软件加密技术及实现(转载)
    惠威D1080带来精致听音感受
    编辑word中文本框的内容
    管理之困:居高不下的流动率
    【转】力控的60个经典问题
    解决联想部分电脑不能用GHOST备份问题
  • 原文地址:https://www.cnblogs.com/wangbaby/p/10206961.html
Copyright © 2011-2022 走看看