Redis 集合(Set)学习笔记
1. 简介
在 Redis 中,集合(Set)是一种无序的、不重复的数据结构。Redis 的集合提供了添加、删除和判断一个元素是否存在于集合中等基本操作,以及对多个集合进行交、并、差等操作。
Redis 的集合底层实现是字典(Hash Table),因此集合的添加、删除、查找操作具有 O(1) 的时间复杂度。
2. 集合操作命令
2.1 添加元素
将一个或多个元素加入到集合中。
bashCopy CodeSADD key member [member ...]
示例:
bashCopy CodeSADD myset "hello"
SADD myset "world"
SADD myset "redis"
2.2 获取元素个数
获取集合中元素的数量。
bashCopy CodeSCARD key
示例:
bashCopy CodeSCARD myset
2.3 判断元素是否存在
判断一个元素是否在集合中。
bashCopy CodeSISMEMBER key member
示例:
bashCopy CodeSISMEMBER myset "hello"
SISMEMBER myset "foo"
2.4 删除元素
将一个或多个元素从集合中删除。
bashCopy CodeSREM key member [member ...]
示例:
bashCopy CodeSREM myset "redis"
SREM myset "foo"
2.5 获取所有元素
获取集合中所有元素。
bashCopy CodeSMEMBERS key
示例:
bashCopy CodeSMEMBERS myset
2.6 随机获取元素
从集合中随机获取一个元素。
bashCopy CodeSRANDMEMBER key [count]
示例:
bashCopy CodeSRANDMEMBER myset SRANDMEMBER myset 2
2.7 获取集合的交集
获取多个集合的交集。
bashCopy CodeSINTER key [key ...]
示例:
bashCopy CodeSADD set1 "hello"
SADD set1 "redis"
SADD set2 "world"
SINTER set1 set2
2.8 获取集合的并集
获取多个集合的并集。
bashCopy CodeSUNION key [key ...]
示例:
bashCopy CodeSADD set1 "hello"
SADD set1 "redis"
SADD set2 "world"
SUNION set1 set2
2.9 获取集合的差集
获取一个集合与多个集合的差集。
bashCopy CodeSDIFF key [key ...]
示例:
bashCopy CodeSADD set1 "hello"
SADD set1 "redis"
SADD set2 "world"
SDIFF set1 set2
3. 示例
下面是一个简单的案例,展示如何使用 Redis 的集合存储用户喜欢的电影:
pythonCopy Codeimport redis
# 连接 Redis 服务器
r = redis.Redis(host='localhost', port=6379, db=0)
# 将用户 A 喜欢的电影添加到集合 movie:like:A 中
r.sadd('movie:like:A', 'The Shawshank Redemption')
r.sadd('movie:like:A', 'Forrest Gump')
r.sadd('movie:like:A', 'The Godfather')
# 将用户 B 喜欢的电影添加到集合 movie:like:B 中
r.sadd('movie:like:B', 'Inception')
r.sadd('movie:like:B', 'The Godfather')
r.sadd('movie:like:B', 'The Dark Knight')
# 获取所有用户喜欢的电影
movie_like_list = r.sunion('movie:like:A', 'movie:like:B')
print("所有用户喜欢的电影:", movie_like_list)
以上代码会输出以下结果:
bashCopy Code所有用户喜欢的电影: {b'The Shawshank Redemption', b'The Godfather', b'Forrest Gump', b'The Dark Knight', b'Inception'}
4. 总结
Redis 的集合是一种非常有用的数据结构,在处理需要去重、快速查找、集合运算等问题时提供了方便的操作。掌握集合的基本操作命令可以使您更加轻松地使用 Redis 存储和查询数据。