gpt4 book ai didi

c# - 使用 BookSleeve 移除 SortedSet

转载 作者:IT王子 更新时间:2023-10-29 06:15:41 24 4
gpt4 key购买 nike

我有大约 336 个键要删除,它们是 SortedSet,我在 Ubuntu 服务器上使用 BookSleeve 作为 C3 客户端和 Redis。下面的代码有效,但如果我删除 Console.WriteLine,它不会随机删除大约 100 个键。它不会引发任何错误,当我在 Redis 服务器端打开 Montior 时,我没有看到为那些未从 C# 端删除的人发送 ZREM 声明。 为什么它会与 Console.Writeline 一起工作而不是当它被注释掉时让我感到困惑。有什么想法吗?

public virtual void RemoveKey(string item, string id)
{
for (int i = 1; i <= item.Length; i++)
{
Console.WriteLine(PrefixKey + item.Substring(0, i));
_redisClient.SortedSets.Remove(_database,
PrefixKey + item.Substring(0, i), id);
}
}

我有课

 public class RedisRepository
{
protected static RedisConnection _redisClient;
protected int _database;
protected bool disposed;

public RedisRepository(int database)
{
string server = ConfigurationManager.AppSettings["redis.server"];
int port = Convert.ToInt32(ConfigurationManager.AppSettings["redis.port"]);
string password = ConfigurationManager.AppSettings["redis.password"];
_redisClient = new RedisConnection(server, port, -1, password);
_database = database;
_redisClient.Open();
}
~RedisRepository()
{
this.Dispose(false);
}

public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);

}

protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
_redisClient.CloseAsync(false);
_redisClient.Dispose();
}

// Dispose unmanaged resources here.
}

disposed = true;
}
}

我已经将上面的 RedisRpository 类继承到另一个使用它的 _redisClient 对象的类中。

最佳答案

如果不看 _redisClient 的生命周期,这个问题有点难以回答。特别是,RedisConnection 的所有操作都是异步的。如果您正在运行启动操作然后立即存在的测试:某些事情可能仍在等待套接字。如果 redis 检测到套接字关闭,它会立即终止该连接(它甚至不会先耗尽套接字,因此挂起的操作将被忽略)。如果您的进程终止,套接字将突然关闭。

但是,如果您使用的是“using”,它应该可以正常工作——dispose 实现应该确保它正确关闭。

所以基本上这会很糟糕:

static void Main() {
var conn = OpenConnection();
// lots of operations
}

但这应该没问题:

static void Main() {
using(var conn = OpenConnection()) {
// lots of operations
}
}

或者,您可以跟踪最后的操作并简单地等待:

Task last = null;
for(...) {
last = conn.SomeOperation(...);
}
if(last != null) conn.Wait(last);

如果它与这些都不相关,那么一个完整的例子真的很有帮助......

关于c# - 使用 BookSleeve 移除 SortedSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18940821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com