转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/124.html?1455853509
薄荷 App 上的伙伴功能大量使用了内存数据库 Redis,随着数据量的快速增长,Redis 膨胀得很快,已经接近 12 GB规模,这些数据全部放在单个 Redis 实例中。单个巨大 Redis 实例有如下几个坏处:
1.首先,需要一台内存很大的机器。Redis 是内存数据库,它需要把所有需求全部放在内存中,需要为之装下 12 GB的 Redis 实例,至少需要 12 GB 内存大小的机器,考虑的预留增长空间,一般需要 12 * 1.5 约 18 GB 内存。 另外还有一个考虑的因素是,Redis 进行硬盘数据存储时,fork 进程需要消耗同样大小的内存,因此一个 12GB 的 redis 实例需要 32 GB左右的内存比较合适,这对机器提出了很高的要求,常常难以满足。
2.然后,Redis 容易成为性能瓶颈。Redis 的并发模型是单进程单线程,它不能充分利用多核 CPU,在请求数很高,或者某一些请求处理比较慢时(比如一些大的数据排序),可能会成为系统的性能瓶颈。有方法可以缓解甚至这个问题,就是建立多个 Redis 实例,通过多个 Redis 连接来实现。
3.另外,单个巨大的 Redis 实例也会增加数据管理难度,因为这么大的数据量,无论是复制,备份操作都比较慢,容易对线上系统造成冲击。
因此,十分有必要把单个巨大的 Redis 实例分割成多个小的 Redis 实例。
使用 Redis 的复制机制,可以在线平滑处理 Redis 实例分割,几乎不会对系统有很大的影响。
分割的具体操作思路如下:
1.首先,规划 Redis 分割策略,通常是基于业务划分,比如薄荷伙伴是基于业务分成 timeline, user_relationship, other 3个 Redis 实例。规划好之后,需要根据规划结果对应用程序中 Redis 程序代码做修改,通常是有一个统一的 Redis 链接修改为多个 Redis 连接,不同业务使用不同的连接。
2.然后,通过 Redis 复制功能建立多个 Redis 副本,让不同 Redis 连接使用不同的 Redis 副本,在 Redis 副本中删除多余的数据。批量删除某个模式的 keys,可以使用下面的 shell 命令:
代码如下:#p#分页标题#e#
redis-cli KEYS "<pattern>" | xargs redis-cli DEL
改成实际的模式,如
代码如下:
redis-cli KEYS "user:*:followers" | xargs redis-cli DEL
表示删除 user followers 数据。
最后通过来回切换并重启 Redis 实例达到完全分割 Redis 实例。
分享到:
相关推荐
c++ 操作redis数据库
redis 数据库 介绍
java操作redis数据库实例,通过java语言如何操作redis数据库的源码
文档描述了Redis 数据库的键值设计,个人感觉很好!
redis数据库windows版。
redis数据库服务器 的 exe 文件 -
redis数据库解压包,redis数据库解压包,redis数据库解压包
C#实现连接Redis数据库
在查看redis数据库时,除了在服务端使用命令行查看,但是RedisDesktopManager等等工具是很好的redis数据库查看工具,使用简单,而且无需安装
python的redis数据库连接与使用
redis数据库支持库
C、C++加载、调用Redis数据库的封装,通过生成的动态库文件可以给其他的程序调用
Redis数据库密码设置和查看密码
redis2.4.6数据库源代码,从官网下载,自已使用!!!
SpringBoot,注解实现Redis 库的切换。
在windows系统上可视化查看redis数据库 redis可视化工具 RedisInsight是Redis Labs提供的一个用于管理和监控Redis数据库的图形用户界面(GUI)工具。它为用户提供了直观的界面,以便更轻松地执行各种Redis数据库操作...
在linux系统上可视化查看redis数据库 redis可视化工具 RedisInsight是Redis Labs提供的一个用于管理和监控Redis数据库的图形用户界面(GUI)工具。它为用户提供了直观的界面,以便更轻松地执行各种Redis数据库操作,...
火山视窗redis数据库列表操作例子