本文主要研究一下claudb的set command
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/set/SetAddCommand.java
@Command("sadd")
@ParamLength(2)
@ParamType(DataType.SET)
public class SetAddCommand implements DBCommand {
@Override
public RedisToken execute(Database db, Request request) {
List<SafeString> values = request.getParams().stream().skip(1).collect(toList());
DatabaseValue value = db.merge(safeKey(request.getParam(0)), set(values),
(oldValue, newValue) -> set(oldValue.getSet().appendAll(newValue.getSet())));
return integer(value.size());
}
}
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/set/SetMembersCommand.java
@ReadOnly
@Command("smembers")
@ParamLength(1)
@ParamType(DataType.SET)
public class SetMembersCommand implements DBCommand {
@Override
public RedisToken execute(Database db, Request request) {
DatabaseValue value = db.getOrDefault(safeKey(request.getParam(0)), DatabaseValue.EMPTY_SET);
return convert(value);
}
}
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/set/SetCardinalityCommand.java
@ReadOnly
@Command("scard")
@ParamLength(1)
@ParamType(DataType.SET)
public class SetCardinalityCommand implements DBCommand {
@Override
public RedisToken execute(Database db, Request request) {
ImmutableSet<SafeString> set = db.getSet(request.getParam(0));
return integer(set.size());
}
}
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/set/SetIsMemberCommand.java
@ReadOnly
@Command("sismember")
@ParamLength(2)
@ParamType(DataType.SET)
public class SetIsMemberCommand implements DBCommand {
@Override
public RedisToken execute(Database db, Request request) {
ImmutableSet<SafeString> set = db.getSet(request.getParam(0));
return integer(set.contains(request.getParam(1)));
}
}
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/set/SetRemoveCommand.java
@Command("srem")
@ParamLength(2)
@ParamType(DataType.SET)
public class SetRemoveCommand implements DBCommand {
@Override
public RedisToken execute(Database db, Request request) {
ImmutableList<SafeString> items = request.getParams().asList().tail();
List<SafeString> removed = new LinkedList<>();
db.merge(safeKey(request.getParam(0)), DatabaseValue.EMPTY_SET,
(oldValue, newValue) -> {
ImmutableSet<SafeString> oldSet = oldValue.getSet();
oldSet.intersection(items.asSet()).stream().forEach(removed::add);
return set(oldSet.removeAll(items));
});
return integer(removed.size());
}
}
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/set/SetUnionCommand.java
@ReadOnly
@Command("sunion")
@ParamLength(2)
@ParamType(DataType.SET)
public class SetUnionCommand implements DBCommand {
@Override
public RedisToken execute(Database db, Request request) {
ImmutableSet<SafeString> result = db.getSet(request.getParam(0));
for (SafeString param : request.getParams().asList().tail()) {
result = result.union(db.getSet(param));
}
return convert(result);
}
}
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/set/SetIntersectionCommand.java
@ReadOnly
@Command("sinter")
@ParamLength(2)
@ParamType(DataType.SET)
public class SetIntersectionCommand implements DBCommand {
@Override
public RedisToken execute(Database db, Request request) {
ImmutableSet<SafeString> result = db.getSet(request.getParam(0));
for (SafeString param : request.getParams().asList().tail()) {
result = result.intersection(db.getSet(param));
}
return convert(result);
}
}
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/command/set/SetDifferenceCommand.java
@ReadOnly
@Command("sdiff")
@ParamLength(2)
@ParamType(DataType.SET)
public class SetDifferenceCommand implements DBCommand {
@Override
public RedisToken execute(Database db, Request request) {
ImmutableSet<SafeString> result = db.getSet(request.getParam(0));
for (SafeString param : request.getParams().asList().tail()) {
result = result.difference(db.getSet(param));
}
return convert(result);
}
}
claudb set相关的command有SetAddCommand、SetMembersCommand、SetCardinalityCommand、SetIsMemberCommand、SetRemoveCommand、SetUnionCommand、SetIntersectionCommand、SetDifferenceCommand
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。