当前位置: 首页 > news >正文

Redis-Set

Set集合

集合类型可以保存多个类型的元素,但和列表类型不同的式,集合类型中的元素是无序的,元素之间不可以重复,这里的无序是顺序不重要,改变元素之间的顺序还是原来的集合。

一个集合中存储最大值为2^32-1元素。

集合类型

Set命令

SADD命令

将一个或者多个元素添加进set中,重复的元素不会被添加进来。

redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SADD myset "World"
(integer) 0
redis> SMEMBERS myset
1) "Hello"
2) "World"

SMEMBERS命令

获取一个set中的所有元素,元素间是无序的。

redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SMEMBERS myset
1) "Hello"
2) "World"

SISMEMBER命令

判断元素是否在set中,返回值1表示在,0表示不在。

redis> SADD myset "one"
(integer) 1
redis> SISMEMBER myset "one"
(integer) 1
redis> SISMEMBER myset "two"
(integer) 0

SCARD命令

获取一个set中的元素个数

redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SCARD myset
(integer) 2

SPOP命令

从set中删除并返回一个或者多个元素,因为set中的元素是无序的,所以出来的元素也都是随机的

redis> SADD myset "one"
(integer) 1
redis> SADD myset "two"
(integer) 1
redis> SADD myset "three"
(integer) 1
redis> SPOP myset
"one"
redis> SMEMBERS myset
1) "two"
2) "three"

SMOVE命令

将set a中的元素取出来放到set b中,1成功0失败,对于重复元素(set b中有a给的元素),set a中会没用转移元素,set b也不会有转移元素

redis> SADD myset "one"
(integer) 1
redis> SADD myset "two"
(integer) 1
redis> SADD myotherset "three"
(integer) 1
redis> SMOVE myset myotherset "two"
(integer) 1
redis> SMEMBERS myset
1) "one"
redis> SMEMBERS myotherset
1) "three"
2) "two"

SREM命令

将指定的元素从set中删除

redis> SADD myset "one"
(integer) 1
redis> SADD myset "two"
(integer) 1
redis> SADD myset "three"
(integer) 1
redis> SREM myset "one"
(integer) 1
redis> SREM myset "four"
(integer) 0
redis> SMEMBERS myset
1) "three"
2) "two"

多集合操作

SINTER命令

获取选中set的交集元素,返回的是交集元素

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SADD key2 "a"
(integer) 1
redis> SINTER key1 key2
1) "a"

SINTERSTRORE命令

获取选中set交集的元素并把这些元素保存到一个新的set中,返回值是交集的个数

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SINTERSTORE key key1 key2
(integer) 1
redis> SMEMBERS key
1) "c"

UNION命令

获取选中set并集的元素

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 0
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> UNION key1 key2
1) "a"
2) "c"
3) "e"
4) "b"
5) "d"

UNIONSTORE命令

获取选中的set并接并且保存到新的set中

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 0
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SUNIONSTORE key key1 key2
(integer) 5
redis> SMEMBERS key
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"

SDIFF命令

获取选中set差集中的元素,这里差集跟选中的set顺序有关,如a{1,2,3,4},b{3,4,5,6}那么a和b的差集是1,2,反过来b和a的差集就是5,6。

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 0
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SDIFFSTORE key key1 key2
(integer) 2
redis> SMEMBERS key
1) "a"
2) "b"

SDIFFSTORE命令

获取选中set差集的元素保存到新的set中

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 0
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SDIFFSTORE key key1 key2
(integer) 2
redis> SMEMBERS key
1) "a"
2) "b"

命令总结

内部编码

1.intset整数集合:当集合中的元素都是整数,素的个数小于 set-max-intset-entries 配置(默认 512 个)时,Redis 会选用 intset 来作为集合的内部实现,从而减少内存的使用。

2.hashtable哈希表:当集合类型无法满足 intset 的条件时,Redis 会使用 hashtable 作为集合的内部实现。

127.0.0.1:6379> sadd setkey 1 2 3 4
(integer) 4
127.0.0.1:6379> object encoding setkey
"intset"

127.0.0.1:6379> sadd setkey 1 2 3 4
(integer) 513
127.0.0.1:6379> object encoding setkey
"hashtable"

不为整数时

127.0.0.1:6379> sadd setkey a
(integer) 1
127.0.0.1:6379> object encoding setkey
"hashtable"

使用场景

集合类型经典场景是标签tag,用户对某些方向高感兴趣就会给这个用户贴上对应的标签,通过标签给这个用户推送感兴趣的能热。

#!/bin/bash# 添加用户标签
redis-cli SADD user:1:tags sports music tech
redis-cli SADD user:2:tags music movie food
redis-cli SADD user:3:tags sports tech game# 为标签添加用户
redis-cli SADD tag:sports:users 1 3
redis-cli SADD tag:music:users 1 2
redis-cli SADD tag:tech:users 1 3# 查找共同兴趣
redis-cli SINTER user:1:tags user:2:tags    # 用户1和2的共同标签
redis-cli SINTER tag:tech:users tag:sports:users  # 既喜欢tech又喜欢sports的用户

http://www.dtcms.com/a/475143.html

相关文章:

  • 上海招聘用的最多的网站网站过程中遇到问题
  • 服务器打不开网站票务网站做酒店推荐的目的
  • 【完整源码+数据集+部署教程】 淡水鱼种类识别图像分割系统源码和数据集:改进yolo11-SDI
  • 西安网站建设中心常用的网页设计软件
  • Java 大视界 -- Java 大数据在智慧农业精准灌溉与施肥决策中的应用
  • 做竞价的网站网站结构seo
  • 【完整源码+数据集+部署教程】 手部清洗步骤识别系统源码和数据集:改进yolo11-DRBNCSPELAN
  • 亚马逊网站建设进度计划表江门网站设计素材
  • 网站建设详情页做旅游网站用什么颜色
  • 学习Java第三十八天——黑马点评69~74
  • java实现ofd转pdf
  • php网站开发实战教程国外免费搭建网站
  • 崇明区建设镇网站越秀移动网站建设
  • 【Android】MVP架构模式
  • WAV文件结构和PCM数据转存WAV文件
  • 美妆网站开发规划书有没有帮忙做问卷调查的网站
  • 绵阳手机网站建设分公司注册流程及需要的材料
  • 手工活接单在家做有正规网站吗湖南省郴州市天气预报
  • Linux中重定向举例!!
  • 建设厅八大员在哪个网站查询视频拍摄器材
  • 济南网站建设推广服务网站建设的目的及目标
  • php 网站开发缓存有那几种关键词挖掘ppt
  • 三、从 MinIO 存储到 OCR 提取,再到向量索引生成
  • 适合设计师看的设计网站网站建设jnlongji
  • 测试题-2
  • 萝岗哪家网站建设好工作态度
  • 企业网站首页设计公司网站规划与建设心得
  • 东莞连衣裙 东莞网站建设国内常见响应式网站
  • 四川省住房与城乡建设厅网站管网crm软件系统的构成包括
  • 江阴建设局官方网站六安哪里有做推广网站