为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕娘9325324 2018-07-26 20:20:09
目前使用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
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

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

查看完整回答
反对 回复 2018-07-30
?
狐的传说

TA贡献1804条经验 获得超3个赞

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

查看完整回答
反对 回复 2018-07-30
  • 2 回答
  • 0 关注
  • 1828 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信