redis - servicestack redis,使用SetEntry时,会在redis db中自动生成一个key为 "ids:+objectName"的集合,如何禁用它?

标签 redis servicestack

使用SetEntry时,会在redis db中自动生成一个key为“ids:+ objectName”的集合。

例如: typedClient.SetEntry("famyly:用户名:jhon",new Family {FatherName="Jhon",...});

将在redis数据库中自动创建一个键名为“ids:Family”和成员如“2343443”的集合, 每次我使用 SetEntry 更新或修改相同的 key 时,“ids:Family”集都会增加一个新的自动生成的成员。如果我频繁更新 key ,这个集合将会变得非常大。

如何禁用自动生成集?这套对于目前的情况来说似乎没什么用。

谢谢

最佳答案

我遇到了同样的问题 - 我发现我们的数据库包含几十个这样的“ids:XXX”集,每个集包含数千万个项目,这些项目消耗了大量的内存。

解决方案是切换到非类型化客户端。您仍然可以在客户端上使用类型化方法,因此您实际上根本没有放弃任何类型安全或自动序列化。创建客户有多种方法;我们倾向于在 RedisClientsManager 上使用 get-in-get-out Exec 快捷方式。您应该能够根据自己的方式进行调整。

类型化客户端 - 创建“ids”集:

// set:
redis.ExecAs<T>(c => c.SetEntry(key, value));

// get:
T value = redis.ExecAs<T>(c => c.GetValue(key));

无类型客户端 - 未创建“ids”集:

// set:
redis.Exec(c => c.Set(key, value));

// get:
using (var cli = _redis.GetClient())
{
    T value = cli.Get<T>(key);
}

关于redis - servicestack redis,使用SetEntry时,会在redis db中自动生成一个key为 "ids:+objectName"的集合,如何禁用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20063297/

相关文章:

javascript - 即使在 javascript 中保存了数据的副本,数据还是空的

c# - Servicestack RegistrationFeature 无法绑定(bind)请求

servicestack - ServiceStack 是否支持多源 CORS?

c# - StackExchange.Redis - 无法解释的超时异常问题

c++ - 具有libev和自定义事件循环的C++ libhiredis

redis - "Redis is configured to save RDB snapshots"错误,与权限/内存/磁盘空间无关

postgresql - 将 Dockerized 应用程序连接到本地 Redis 和 Postgresql

json - 将 ServiceStack 默认格式更改为 JSON,但保留 SwaggerUI 的 HTML 格式

c# - ServiceStack 选择投影未按预期工作

c# - ServiceStack EnryptedClient 使用 IReturnVoid DTO 错误