Redis 是一款高性能的键值存储数据库,支持多种数据类型,其中集合(Set)是一种非常常用的数据类型。本文将介绍 Redis 的集合数据类型及操作方式,包括集合的创建、添加、删除、查询等操作,以及集合的交、并、差等集合运算。
集合的创建和添加
Redis 的集合是一个无序且不重复的元素集合,创建方式如下:
sadd key member [member ...]
其中,key 是集合的名称,member 是集合中的元素。添加元素的方式可以是一个或多个元素,例如:
sadd myset apple orange banana
这样就创建了一个名为 myset 的集合,并添加了三个元素 apple、orange 和 banana。
集合的删除和查询
Redis 提供了多种方式来删除集合中的元素,包括删除单个元素、删除多个元素和删除整个集合。删除单个元素的方式如下:
srem key member [member ...]
其中,key 是集合的名称,member 是要删除的元素。删除多个元素的方式也很简单:
srem myset apple orange
这样就删除了 myset 集合中的 apple 和 orange 两个元素。
查询集合中是否包含某个元素的方式如下:
sismember key member
其中,key 是集合的名称,member 是要查询的元素。如果集合中包含该元素,则返回 1,否则返回 0。
集合的交、并、差等集合运算
Redis 的集合还支持多种集合运算,包括集合的交、并、差等操作。集合的交操作可以用以下命令实现:
sinter key [key ...]
其中,key 是要求交集的集合名称。例如:
sinter set1 set2 set3
这样就求出了 set1、set2 和 set3 三个集合的交集。
集合的并操作可以用以下命令实现:
sunion key [key ...]
其中,key 是要求并集的集合名称。例如:
sunion set1 set2 set3
这样就求出了 set1、set2 和 set3 三个集合的并集。
集合的差操作可以用以下命令实现:
sdiff key [key ...]
其中,key 是要求差集的集合名称。例如:
sdiff set1 set2
这样就求出了 set1 中不包含 set2 中元素的差集。
示例代码
以下是一个使用 Redis 集合的示例代码,实现了一个简单的用户系统,包括用户的添加、删除和查询功能:
// www.javascriptcn.com code example
const redis = require('redis');
const client = redis.createClient();
// 添加用户
function addUser(userId, username) {
client.sadd('users', userId);
client.hset(`user:${userId}`, 'username', username);
}
// 删除用户
function deleteUser(userId) {
client.srem('users', userId);
client.del(`user:${userId}`);
}
// 查询用户是否存在
function isUserExist(userId) {
return new Promise((resolve, reject) => {
client.sismember('users', userId, (err, res) => {
if (err) {
reject(err);
} else {
resolve(res === 1);
}
});
});
}
// 测试代码
addUser(1, 'Alice');
addUser(2, 'Bob');
deleteUser(2);
isUserExist(1).then(console.log); // true
isUserExist(2).then(console.log); // false以上代码使用 Redis 集合存储了所有用户的 ID,使用哈希表存储每个用户的详细信息。通过集合的添加、删除和查询操作,实现了一个简单的用户系统。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d24cdda941bf713445dd01