烟台h5响应式网站建设,十大免费ppt网站下载,网建会是什么意思,wordpress default集合类型也是保存多个字符串类型的元素的#xff0c;但和列表类型不同的是#xff0c;集合中
1#xff09;元素之间是无序的
2#xff09;元素不允许重复
一个集合中最多可以存储2的32次方个元素。Redis 除了支持集合内的增删查改操作#xff0c;同时还支持多个集合取交…集合类型也是保存多个字符串类型的元素的但和列表类型不同的是集合中
1元素之间是无序的
2元素不允许重复
一个集合中最多可以存储2的32次方个元素。Redis 除了支持集合内的增删查改操作同时还支持多个集合取交集、并集、差集合理地使用好集合类型能在实际开发中解决很多问题。
集合类型 Set命令
sadd
将一个或者多个元素添加到set中。注意重复的元素无法添加到set中
语法
SADD key member [member ...]时间复杂度O(1)
返回值本次添加成功的元素个数。
示例
redis sadd myset Hello
(integer) 1
redis sadd myset World
(integer) 1
redis sadd myset World #插入重复元素
(integer) 0
redis smembers myset
1) Hello
2) Worldsmembers
获取一个set中的所有元素注意,元素间的顺序是无序的。
语法
SMEMBERS key时间复杂度O(N)
返回值所有元素的列表。
示例
redis sadd myset Hello
(integer) 1
redis sadd myset World
(integer) 1
redis smembers myset
1) Hello
2) Worldsismember
判断一个元素在不在set中。
语法
SISMEMBER key member时间复杂度O(1)
返回值1表示元素在set 中。0表示元素不在set中或者key不存在。
示例
redis sadd myset one
(integer) 1
redis sismember myset one
(integer) 1
redis sismember myset two
(integer) 0spop
从set中随机删除并返回一个或者多个元素。注意由于set内的元素是无序的所以取出哪个元素实际是未定义行为即随机的。
语法
SPOP key [count]时间复杂度O(N), n是count表示删除的元素个数
返回值取出的元素。
示例
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) three
2) two
redis sadd myset four
(integer) 1
redis sadd myset five
(integer) 1
redis spop myset 3 #删除三个数
1) three
2) four
3) two
redis smembers myset
1) fivesrandmember
用于从集合中随机返回一个元素。该命令提供了一个可选参数count用于指定返回的元素数量。当count值为正数时返回的元素不重复当count值为负数时返回的元素可以重复。
语法
SRANDMEMBER key [count]key要从中随机获取元素的集合的键。count可选要返回的元素数量。
示例
127.0.0.1:6379 sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379 srandmember key
4
127.0.0.1:6379 srandmember key
3
127.0.0.1:6379 srandmember key
1
127.0.0.1:6379 srandmember key
4
127.0.0.1:6379 srandmember key 3
1) 3
2) 2
3) 1smove
smove用于将元素从一个集合移动到另一个集合。如果元素被成功移动命令返回1否则返回0。
语法
SMOVE source destination membersource源集合的键。destination目标集合的键。member要移动的元素。
时间复杂度O(1)
返回值1表示移动成功0表示失败。
示例
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) twosrem
SREM用于从集合中删除一个或多个元素。此命令会返回成功删除元素的数量。
语法
SREM key member [member ...]key集合的键名。member要删除的一个或多个元素。
时间复杂度O(N),N是要删除的元素个数
返回值本次操作删除的元素个数。
示例
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) twoscard
SCARD用于获取集合Set的成员数。
语法
SCARD key时间复杂度O(1)
返回值set内的元素个数。
示例
redis sadd myset Hello
(integer) 1
redis sadd myset World
(integer) 1
redis scard myset
(integer) 2集合间操作
集合求交集、并集、差集 sinter/sinterstore
sinter
SINTER用于计算多个集合的交集。这个命令返回所有给定集合的交集。如果其中一个集合为零元素集合结果也将是零元素集合。如果没有给定任何集合结果是一个空集。
语法
SINTER key [key ...]key一个或多个集合的键。
时间复杂度O(N *M),N是最小的集合元素个数.M是最大的集合元素个数.
返回值交集的元素。
示例
redis sadd key1 a b c
(integer) 3
redis sadd key2 c d e
(integer) 3
redis sinter key1 key2
1) csinterstore
SINTERSTORE用于计算多个集合的交集并将结果存储在新的集合中。如果目标集合已存在那么这个集合将被覆盖。执行完命令后返回结果集中的元素数量。
语法
SINTERSTORE destination key [key ...]destination新集合的键用于存储计算出的交集。key一个或多个集合的键。
时间复杂度O(N *M),N是最小的集合元素个数.M是最大的集合元素个数.
返回值交集的元素个数。
示例
redis sadd key1 a b c
(integer) 3
redis sadd key2 c d e
(integer) 3
redis sinterstore key key1 key2
(integer) 1
redis smembers key #存储到了新的key中
1) csunion/sunionstore
sunion
SUNION用于计算多个集合的并集。这个命令返回一个包含所有给定集合的并集的新集合。如果没有给定任何集合结果是一个空集。
语法
SUNION key [key ...]key一个或多个集合的键。
时间复杂度O(N),N给定的所有集合的总的元素个数.
返回值并集的元素。
示例
redis sadd key1 a b c
(integer) 3
redis sadd key2 c d e
(integer) 3
redis sunion key1 key2
1) a
2) c
3) e
4) b
5) dsunionstore
SUNIONSTORE用于计算多个集合的并集并将结果存储在新的集合中。如果目标集合已存在那么这个集合将被覆盖。执行完命令后返回结果集中的元素数量。
语法
SUNIONSTORE destination key [key ...]destination新的集合名。如果它已经存在会被覆盖。key [key ...]一个或多个要求并集的集合。
时间复杂度O(N),N给定的所有集合的总的元素个数.
返回值并集的元素个数。
示例
redis sadd key1 a b c
(integer) 3
redis sadd key2 c d e
(integer) 3
redis sunionstore key key1 key2
(integer) 5
redis smembers key
1) a
2) c
3) e
4) b
5) dsdiff/sdiffstore
sdiff
SDIFF 用于返回名为 key 的第一个集合与其他集合之间的差集。换句话说结果集中的每个元素都是第一个集合中存在而在其他集合中不存在的元素。
语法
SDIFF key [key ...]key 是想要从中获取差集的集合的键。[key...]是想要与第一个集合进行差集操作的其他集合的键。方括号表示这些键是可选的可以有一个或多个。
时间复杂度O(N),N给定的所有集合的总的元素个数.
返回值差集的元素。
示例
redis sadd key1 a b c
(integer) 3
redis sadd key2 c d e
(integer) 3
redis sdiff key1 key2
1) a
2) b
redis sdiff key2 key1
1) d
2) esdiffstore
SDIFFSTORE 它的功能类似于 SDIFF但是它不仅会返回差集还会将差集保存到一个指定的 key 中。
语法
SDIFFSTORE destination key [key ...]destination 是存储差集结果的新 key。 key 是想要从中获取差集的集合的键。 [key...]是想要与第一个集合进行差集操作的其他集合的键。方括号表示这些键是可选的可以有一个或多个。
时间复杂度O(N),N给定的所有集合的总的元素个数.
返回值差集的元素个数。
示例
redis sadd key1 a b c
(integer) 3
redis sadd key2 c d e
(integer) 3
redis sdiffstore key key1 key2
(integer) 2
redis smembers key
1) a
2) b
redis sdiffstore key key2 key1
(integer) 2
redis smembers key
1) d
2) e内部编码
集合类型的内部编码有两种:
intset(整数集合)当集合中的元素都是整数并且元素的个数小于set-max-intset-entries配置(默认512个)时Redis 会选用intset 来作为集合的内部实现从而减少内存的使用。hashtable(哈希表)当集合类型无法满足intset 的条件时Redis 会使用hashtable作为集合的内部实现。
1当元素个数较少并且都为整数时内部编码为 intset
127.0.0.1:6379 sadd setkey 1 2 3 4
(integer) 4
127.0.0.1:6379 object encoding setkey
intset2当元素个数超过 512 个内部编码为 hashtable
127.0.0.1:6379 sadd setkey 1 2 3 4
(integer) 513
127.0.0.1:6379 object encoding setkey
hashtable3当存在元素不是整数时内部编码为 hashtable
127.0.0.1:6379 sadd setkey a
(integer) 1
127.0.0.1:6379 object encoding setkey
hashtable应用场景
集合类型比较典型的使用场景是标签(tag)。例如A用户对娱乐、体育板块比较感兴趣B用户对历史、新闻比较感兴趣这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同一个标签的人以及用户的共同喜好的标签这些数据对于增强用户体验和用户黏度都非常有帮助。例如一个电子商务网站会对不同标签的用户做不同的产品推荐。
1给用户添加标签
sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag2 tag3 tag5
...
sadd user:k:tags tag1 tag2 tag42给标签添加用户
sadd tag1:users user:1 user:3
sadd tag2:users user:1 user:2 user:3
...
sadd tagk:users user:1 user:4 user:9 user:283删除用户下的标签
srem user:1:tags tag1 tag5
...4删除标签下的用户
srem tag1:users user:1
srem tag5:users user:1
...5计算用户的共同兴趣标签
sinter user:1:tags user:2:tags同喜好的标签这些数据对于增强用户体验和用户黏度都非常有帮助。例如一个电子商务网站会对不同标签的用户做不同的产品推荐。
1给用户添加标签
sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag2 tag3 tag5
...
sadd user:k:tags tag1 tag2 tag42给标签添加用户
sadd tag1:users user:1 user:3
sadd tag2:users user:1 user:2 user:3
...
sadd tagk:users user:1 user:4 user:9 user:283删除用户下的标签
srem user:1:tags tag1 tag5
...4删除标签下的用户
srem tag1:users user:1
srem tag5:users user:1
...5计算用户的共同兴趣标签
sinter user:1:tags user:2:tags