开发者社区> 问答> 正文

redis 持续插入大量数据无法成功

我是刚学这个redis, 发现一个问题,不知道大家有没有碰到过, 当我持续插入数据时, redis-server log 显示:
redis cannot allocate memory
本人查了一下,是说redis是个内存吃货, 一直向系统要,linux系统有个参数设置 vm.overlimt_menoy = 1就可以了。 结果一试果然可以了。
vm.overcommit_memory 表示内核在分配内存时候做检查的方式。这个变量可以取到0,1,2三个值。对取不同的值时的处理方式都定义在内核源码 mm/mmap.c 的 __vm_enough_memory 函数中。
取 1 的时候 :
此时宏为 OVERCOMMIT_ALWAYS,函数直接 return 0,分配成功。
取 2 的时候:
此时宏为 OVERCOMMIT_NEVER,内核计算:内存总量×vm.overcommit_ratio/100+SWAP 的总量,如果申请空间超过此数值,则分配失败。vm.overcommit_ratio 的默认值为50。
取 0 的时候:
此时宏为 OVERCOMMIT_GUESS,内核计算:NR_FILE_PAGES 总量+SWAP总量+slab中可以释放的内存总量,如果申请空间超过此数值,则将此数值与空闲内存总量减掉 totalreserve_pages(?) 的总量相加。如果申请空间依然超过此数值,则分配失败。
以上为粗略描述,在实际计算时,如果非root进程,则在计算时候会保留3%的空间,而root进程则没有该限制。详细过程可看源码。
这时, 系统就开始慢慢的有点卡了,动不了。
我看了下配置可以限制redis的使用内存大小,但是超限后,就会根据策略删除key了, 但是这并不是我想要的结果呀。
有没有好一点的实践了,或者是我配置哪里还没有搞明白。

展开
收起
落地花开啦 2016-02-18 17:06:35 4332 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    多个方面吧,主要是mongodb用起来简单的多,极大的压缩了代码量,前后台都可以使用统一的json结构。当然有些应用场合还是可以使用redis的,但最好不要作为主数据库

    2019-07-17 18:44:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载