Redis 是否保留前缀类型键的所有字符?
Does Redis keep all chars from prefixed kind of keys?
我可能有 100 英里长,但部分静态密钥,例如:
someReal...LongStaticPrefix:12345
someReal...LongStaticPrefix:12
someReal...LongStaticPrefix:123456
只有密钥的最后一部分是动态的,其余部分是静态的。
Redis 是将所有键都保留很长,还是创建内部别名或类似的东西?
我应该担心存储还是性能?
或者如果我让内部别名做键以保持它们简短会更好吗?
Redis 确实保留了整个密钥。这个长前缀会影响你的内存使用。
鉴于redis使用散列映射来存储键,对性能的影响很小。哈希映射负载因子通常在 0.5 到 1 之间。这意味着每个哈希槽通常只有一个或两个键。因此,性能影响是长密钥的额外网络负载、对其进行散列的时间更长,以及在散列槽中与一个或两个密钥进行比较的时间更长。它可能可以忽略不计,除非你的前缀真的很长
考虑使用更短的键前缀。
在考虑使用哈希结构 (HSET) 之前,请考虑您是否正在使用 Redis 集群,或者您最终是否需要。单个哈希键不能分片。
一个小的优化:考虑使用后缀在哈希槽链上进行更快的比较
我可能有 100 英里长,但部分静态密钥,例如:
someReal...LongStaticPrefix:12345
someReal...LongStaticPrefix:12
someReal...LongStaticPrefix:123456
只有密钥的最后一部分是动态的,其余部分是静态的。
Redis 是将所有键都保留很长,还是创建内部别名或类似的东西?
我应该担心存储还是性能?
或者如果我让内部别名做键以保持它们简短会更好吗?
Redis 确实保留了整个密钥。这个长前缀会影响你的内存使用。
鉴于redis使用散列映射来存储键,对性能的影响很小。哈希映射负载因子通常在 0.5 到 1 之间。这意味着每个哈希槽通常只有一个或两个键。因此,性能影响是长密钥的额外网络负载、对其进行散列的时间更长,以及在散列槽中与一个或两个密钥进行比较的时间更长。它可能可以忽略不计,除非你的前缀真的很长
考虑使用更短的键前缀。
在考虑使用哈希结构 (HSET) 之前,请考虑您是否正在使用 Redis 集群,或者您最终是否需要。单个哈希键不能分片。
一个小的优化:考虑使用后缀在哈希槽链上进行更快的比较