集合
存储多个各不相同的元素
Redis的集合以无序的方式存储多个各不相同的元素。用户可以快速地向集合添加元素,或者从集合里面删除元素,也可以对多个集合进行集合运算操作,比如计算并集、交集和差集。
SADD key element [element …]
将一个或多个元素添加到给定的集合里面,已经存在于集合的元素会自动忽略,命令返回新添加到集合的元素数量。
SREM key element [element …]
移除集合中的一个或者多个元素,不存在于集合的元素会自动被忽略,命令返回存在并且被移除的元素数量。
SISMEMBER key element
检查给定的元素是否存在于集合,存在的话返回1;如果元素不存在,或者给定的键不存在,那么返回0.
SCARD key
返回集合包含的元素数量(也即是集合的基数)
SMEMBERS key
返回集合包含的所有元素。当集合的元素数量比较大时,执行该命令有可能会造成服务器阻塞。
投票示例
API | 说明 | 操作 |
---|---|---|
Vote(key, client) | 将投票结果记录到给定的键 | 使用集合来储存所有已投票的人 |
Vote.cast(user) | 用户进行投票。 | 使用SADD将用户添加到集合里面。 |
Vote.undo(user) | 取消用户的投票。 | 使用SREM将用户从集合中移除。 |
Vote.is_voted(user) | 检查用户是否已投票。 | 使用SISMEMBER检查用户是否存在于集合。 |
Vote.voted_members() | 返回所有已投票用户。 | 调用SMEMBERS。 |
Vote.voted_count() | 返回已投票用户的数量。 | 调用SCARD。 |
添加标签示例
API | 说明 | 操作 |
---|---|---|
Tag(key, client) | 使用指定的键来储存某种东西的标签。 | 使用集合来储存标签。 |
Tag.add(*tags) | 添加任意多个标签。 | 调用SADD命令。 |
Tag.remove(*tags) | 移除任意多个标签 | 调用SREM命令 |
Tag.is_include(tag) | 检查某个标签是否存在。 | 调用SISMEMBER命令 |
Tag.get_all() | 返回所有标签。 | 调用SMEMBERS命令。 |
Tag.count() | 返回标签的数量。 | 调用SCARD命令。 |
SPOP key
随机地从集合中移除并返回一个元素
SRANDMEMBER key [count]
如果没有给定可选的count参数,那么命令随机地返回集合中的一个元素。
如果给定了count参数,那么:
- 当count为正数,并且少于集合基数时,命令返回一个包含count个元素的数组,数组中的每个元素各不相同。如果count大于或等于集合基数,那么命令返回整个集合。
- 当count为负数时,命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。
微博转发抽奖功能
API | 说明 | 操作 |
---|---|---|
Loterry(key, client) | 使用指定的键来储存参与抽奖的人。 | 使用集合来储存参与抽奖的人。 |
Loterry.add_player(*user) | 添加参与者 | 调用SADD命令 |
Loterry.get_all_players() | 返回所有参与者 | 调用SMEMBERS命令。 |
Loterry.player_count() | 返回参与者数量 | 调用SCARD命令 |
Loterry.draw(n) | 抽出n个获奖者。 | 调用SRANDMEMBER命令。 |
集合运算操作
SDIFF key [key …]
计算所有给定集合的差集,并返回结果。
SDIFFSTORE destkey key [key …]
计算所有给定集合的差集,并将结果储存到destkey。
SINTER key [key …]
计算所有给定集合的交集,并返回结果。
SINTERSTORE destkey key [key …]
计算所有给定集合的交集,并将结果储存到destkey。
SUNION key [key …]
计算所有给定集合的交并集,并返回结果。
SUNIONSTORE destkey key [key …]
计算所有给定集合的并集,并将结果储存到destkey。
商品筛选
API | 说明 | 操作 |
---|---|---|
ItemFilter(client) | 指定客户端。 | |
ItemFilter.add_option(item_set) | 添加一个筛选条件选项,item_set集合储存了所有符合该选项的商品。 | 把item_set添加到一个Python集合里面,等待进行筛选 |
ItemFilter.result() | 根据目前已给定的选项进行筛选,并返回符合条件的商品。 | 使用SINTER,对所有已给定选项的集合进行计算。 |
ItemFilter.store_result(key) | 根据目前已给定的选项进行筛选,并把筛选结果储存到给定的键里面。 | 使用SINTERSTORE,计算并存储交集结果 |