怎么看网站源码用什么做的,辽宁省建设工程信息网官网新网站入口,杭州旅游攻略,建站广告目录
前言
1.常见命令
2.使用场景 前言
集合类型也是保存多个字符串类型的元素的#xff0c;但和列表类型不同的是#xff0c;集合中1)元素之间是无序的2)元素不允许重复#xff0c;如图2-24所示。一个集合中最多可以存储22 - 1个元素。Redis 除了支持集合内的增删查改操…目录
前言
1.常见命令
2.使用场景 前言
集合类型也是保存多个字符串类型的元素的但和列表类型不同的是集合中1)元素之间是无序的2)元素不允许重复如图2-24所示。一个集合中最多可以存储22 - 1个元素。Redis 除了支持集合内的增删查改操作同时还支持多个集合取交集、并集、差集合理地使用好集合类型能在实际开发中解决很多问题。 图2-24集合类型 1.常见命令
SADD 将一个或者多个元素添加到set中。注意重复的元素无法添加到set中。 语法:
SADD key member [member ...]
命令有效版本: 1.0.0之后 时间复杂度: 0(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) World
SMEMBERS 获取一个set中的所有元素注意元素间的顺序是无序的。 语法:
SMEMBERS key
命令有效版本: 1.0.0之后 时间复杂度: O(N) 返回值:所有元素的列表。 示例:
redis SADD myset Hello
(integer) 1
redis SADD myset World
(integer) 1
redis SMEMBERS myset
1) Hello
2) World
SISMEMBER 判断一个元素在不在set中。 语法:
SISMEMBER key member
redis SADD myset one
(integer) 1
redis SISMEMBER myset one
(integer) 1
redis SISMEMBER myset two
(integer) 0
SCARD 获取一个set的基数(cardinality) 即set中的元素个数。 语法:
SCARD key
命令有效版本: 1.0.0之后 时间复杂度: 0(1) 返回值: set 内的元素个数。 示例:
redis SADD myset Hello
(integer) 1
redis SADD myset World
(integer) 1
redis SCARD myset
(integer) 2
SPOP 从set中删除并返回一个或者多个元素。注意由于set内的元素是无序的所以取出哪个元素实际是未定义行为即可以看作随机的。 语法:
SPOP key [count]
命令有效版本: 1.0.0 之后 时间复杂度: 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) five
SMOVE 将一个元素从源set取出并放入目标set中。 语法:
SMOVE source destination member
命令有效版本: 1.0.0之后 时间复杂度: 0(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) two
SREM 将指定的元素从set中删除。 语法:
SREM key member [member ...]
命令有效版本: 1.0.0之后 时间复杂度: 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) two
集合间操作 交集(inter) 、并集(union) 、差集(diff) 的概念如图2-25所示。. 图2-25集合求交集、并集、差集 SINTER 获取给定set的交集中的元素。 语法:
SINTER key [key ...]
命令有效版本: 1.0.0之后 时间复杂度:0(N*M),N是最小的集合元素个数.M是最大的集合元素个数. 返回值:交集的元素。 示例:
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 SINTER key1 key2
1) c
SINTERSTORE 获取给定set的交集中的元素并保存到目标set中。 语法:
SINTERSTORE destination key [key ...]
命令有效版本: 1.0.0之后 时间复杂度:O(N*M),N是最小的集合元素个数.M是最大的集合元素个数. 返回值:交集的元素个数。 示例:
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
SUNION 获取给定set的并集中的元素。 语法:
SUNION key [key ...]
命令有效版本: 1.0.0之后 时间复杂度: O(N), N给定的所有集合的总的元素个数. 返回值:并集的元素。 示例:
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 SUNION key1 key2
1) a
2) c
3) e
4) b
5) d
SUNIONSTORE 获取给定set的并集中的元素并保存到目标set中。 语法:
SUNIONSTORE destination key [key ...]
命令有效版本: 1.0.0之后 时间复杂度: 0(N), N给定的所有集合的总的元素个数. 返回值:并集的元素个数。 示例:
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 SUNIONSTORE key key1 key2
(integer) 5
redis SMEMBERS key
1) a
2) c
3) e
4) b
5) d
SDIFF 获取给定set的差集中的元素。 语法:
SDIFF key [key ...]
命令有效版本: 1.0.0之后 时间复杂度: O(N), N给定的所有集合的总的元素个数. 返回值:差集的元素。 示例:
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 SDIFF key1 key2
1) a
2) b
SDIFFSTORE 获取给定set的差集中的元素并保存到目标set中。 语法:
SDIFFSTORE destination key [key ...]
命令有效版本: 1.0.0 之后 时间复杂度: O(N), N给定的所有集合的总的元素个数. 返回值:差集的元素个数。 示例:
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 SDIFFSTORE key key1 key2
(integer) 2
redis SMEMBERS key
1) a
2) b
命令小结 表2-6总结了集合类型的常见命令,开发人员可以根据自身需求进行选择。 表2-6集合类型命令 内部编码 集合类型的内部编码有两种: ●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
intset
2)当元素个数超过512个内部编码为hashtable:
127.0.0.1:6379 sadd setkey 1 2 3 4
(integer) 513
127.0.0.1:6379 object encoding setkey
hashtable
3)当存在元素不是整数时内部编码为hashtable:
127.0.0.1:6379 sadd setkey a
(integer) 1
127.0.0.1:6379 object encoding setkey
hashtable
2.使用场景
集合类型比较典型的使用场景是标签(tag) 。例如A用户对娱乐、体育板块比较感兴趣B用户对历史、新闻比较感兴趣这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同一个标签的人以及用户的共同喜好的标签这些数据对于增强用户体验和用户黏度都非常有帮助。例如一个电子商务网站会对不同标签的用户做不同的产品推荐。 下面的演示通过集合类型来实现标签的若干功能。 1)给用户添加标签
sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag2 tag3 tag5
...
sadd user:k:tags tag1 tag2 tag4
2)给标签添加用户
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:28
3)删除用户下的标签
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