猿问
下载APP

mongodb和redis结合,用id做为redis的key,key过长的问题

目前使用mongodb和redis结合。redis的key,使用mongodb自动生成的id,比如这个

ObjectId("5942221b18506251977e0d97")

一个是24字节。

现在有些场景是必须两个id构成一个redis的key。加起来。两个就是48个字节。再加上一些命名空间。一个key就是55字节左右。

比如

list:5942221b18506251977e0d97:593ae709dd809044f7284459

这么长,对性能影响多大?有没有必要优化?

之所以使用两个key,是方便删除的问题。比如 一个文章分类删除了,我可以把所有分类下面的key都清除掉。
比如

DEL list:5942221b18506251977e0d97:*

否则你不清除,这些key会一直遗留,占空间。


或许我可以设置过期时间,让redis自己删除过期的key


慕娘9325324
浏览 475回答 2
2回答

守候你守候我

性能上倒是没什么影响 但是会占用存储空间 如果说这个数据量很大 要存储上百万的key 光key就需要耗费很多内存,你可以设定规则 比如 key = md5(namespace+id1+id2) md5加密长度是定长32位 我目前在做点赞微服务就是这种方式 制定规则生成一个unionKey,将点赞总数缓存在redis中

狐的传说

很长的key当然会改变redis构建的数据对象的底层实现方式,会影响redis查询数据的速度,另外很长的key导致的底层结构的改变也会使存储单元数据的空间变大的,如果存储的数据很多,消耗大量的内存,也是很不利的,应该考虑将子分类单独构建成一个数据对象,键可以设置成分类相关联的,这样删除一个分类的时候,顺便把对应子分类的名字也给删除了,有一本书是redis的设计与实现,可以看一下
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答