redis 改版的项目上线有两个月了,记录一下redis 相关的经验,也给大家一个参照:
我们的redis server是一主一从,使用R710的机器,8核心,24G内存; 每天约插入200万左右的数据,现在库里有3000万条纪录,占用了9G的内存;由于现在每天内存增长太快,担心很快会无法负载,因此写了脚本每天将过期数据删除;
现在运行中的问题:
1.redis运行基本稳定,从没有自己中断过服务,php脚本去set的话大概1秒钟能设置1万条小数据,并没有官方给出的数据高;但是修改配置后大重启服务时大概需要1到2分钟才能完全将硬盘中的数据加载到内存中去,在加载完之前,redis不能提供服务;
2.redis的默认配置中,每60秒如果纪录更改数达到1万条就需要dump到硬盘中去,但实际上由于超过了这个数,我们的redis几乎不停地在dump数据到硬盘上;dump数据到硬盘时,我估计为了达到一个原子的效应,避免数据丢失,redis是先把数据dump到一个临时文件,然后重命名为你在配置文件设定的数据文件名.而前面说到,加载数据要1到2分钟,dump数据应该也在1分钟左右吧;dump出来的文件差不多1到2个G;这样,服务器几乎一直保持着每分钟写一个2G的文件的这种IO的负载;磁盘基本不闲着;
3.还是在dump中,除开磁盘不闲着以外,CPU也一路飙升:redis是fork一个子进程来dump数据到硬盘,原有进程占用30%+的CPU,而dump数据的子进程单独享用用了一个CPU核心,cpu占用100%;
4. redis在dump数据的时候,是fork子进程,这样产生一个问题:redis本向占用了9G的内存,在dump数据时又fork一个进程,子进程继承了内存分配,也占用了9G的内存….redis一下子占用了18G的内存了;
发现这些问题后,我修改了redis的配置文件,设置为30分钟内只要有一次写修改就dump数据,这样系统负载大幅减轻了.
处于设想中的想法:
主redis并不dump数据,不管写多少次都不dump到硬盘,或是这个dump的时间非常长;从redis则主要承担合理地dump数据到硬盘以起备份作用;主redis启动时先从从redis中scp或是ftp download数据回来;有待后续验证;
订阅
近期评论
- 上帝的假牙 在 淘宝搜索优化课程:淘宝宝贝搜索优化的几个要素 上的评论
- 韩剧季 在 服务器的ACPI错误修正 上的评论
- Insion 在 社区全文检索引擎Hyper Estraier 学习笔记 上的评论
- Brian 在 关于”为什么京东今天还在用.net架构?”的乱想 上的评论
- xapian.php 请发给我一份,或者是 给我一个 xapian 在Windows 下面跑的例子,谢谢了 ! 在 用PHP和xapian构建全文检索[转] 上的评论
- woooha 在 检测文本正文是否包含有特定词的PHP扩展 上的评论
- 老栋 在 关于”为什么京东今天还在用.net架构?”的乱想 上的评论
- 一米六二 在 redis 运维实际经验纪录之一 上的评论
- 一米六二 在 redis 运维实际经验纪录之一 上的评论
- ruochen 在 redis 运维实际经验纪录之一 上的评论
-
最近文章
0-家人
0-新酷应用
Blogroll
startups
友情链接
同事
日历
2012 五月 一 二 三 四 五 六 日 « 二 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 搜索

好啊,我们现在也在试验redis,但没有你那么大的数据量
感觉 比ttserver要稳定许多
ttserver 还是很稳定的吧
你们用tt有问题?
如此大量的数据!为什么还会考虑用redis? 这些数据的持久化需求不大?,考虑过mongodb么?
另外,我们也在考虑引入mongodb
redis本来是打算小用一下,主要是用它的排序功能生成各种排行榜数据,没想到提供了之后就迅速被滥用了 大家都狂用它,数据量一下子超出预计的好多倍
redis拿来作些要快速,持久性不是很重要的东西真是不错。但mongodb一直不知道要用到什么地方好,引入mongodb作为存图片,文件之用。又觉得mysql+mongodb+redis太X了。单纯的开发的新的WEB应用,用mongodb作数据库,没成熟的mapper操纵,时间成本又大了。
呵呵,很多开发人员都这样,看到一个好处就滥用,任何工具都有其最适宜的场合,在成本和速度之间找平衡
我们当时还好,因为redis存的本身就是访问统计类数据,是为运营提供数据支撑的.这玩意儿大部分时间工作正常就OK.我们只遇到过一次出现内存危机了,不过很快解决了.还是因为数据量小吧,不到亿的数据,机器有32G的内存,没多大事.如果是小公司,没机器,或是业务比较重要,就要认真考虑了.
我们现在的一个业务,是做订单和PV统计的,就比较保守,用了mysql的innoDB引擎,redis纯粹是在前面做cache.
Pingback 引用通告: redis 运维实际经验纪录之一 : NoSQLfan
不错,多谢分享。我们马上也要大规模使用了,使用的时候需要谨慎而节制了。
关于“dump数据的子进程单独享用用了一个CPU核心,cpu占用100%;“,因为子进程主要负责把内存中的数据写到磁盘中,也就是说主要负载在IO上面,为什么cpu也占用这么多呢?
因为当时开启了数据压缩。
你好,redis数据恢复aof怎么做呢?
请问redis能不能跑在aix上?
这个真不知道,我没见过aix啥样呢
不过你可以试一下,我觉得redis应该是标准posix的都可以。
Redis没有什么依赖,应该能跑在Aix上,自己编译吧。
可以的,我刚移植过去了,用libtool来编译
请问如何才关闭2种持久化?我们只需要做缓存,不需要数据的持久化。
你设置持久化的条件的时候,设一个不可能到得了的条件试试,比如要求每分钟有1000次更新了就写入一次之类的
还另一个办法就是改redis的代码了.这个应该还比较好改.
看到一个redis的配置文件,有两个疑惑:
1)没设置最大使用内存,redis使用内存上限如何处理?
2)没设置save机制,不设置redis没有默认的么?就永远只做cache,不会dump?
超过内存上限了,可以通过sysctl中的一个设置来开启硬盘缓存的.当然性能会下降.
redis默认的save语句好像是有的.我从来没有试过不save的那种用法,呵呵.理论上应该是不设置save就只是cache了.
删功能是我最喜欢的hack手段了,哈哈.