1.心路历程

上年11月份来公司了,和另外一个同事一起,做了公司一个移动项目的微信公众号,然后为了推广微信公众号,策划那边需要我们做一些活动,包括抽奖,投票。最开始是没有用过redis的,公司因为考虑到参与人数的问题,给我们配了两台redis服务器,一台windows的(负责本地测试),一台linux的(负责线上版本),接下来说说途中遇到的坑,和最后的解决方法

2.坑之一,存List的瓶颈问题

linux版本redis服务器是16G的内存,因为第一次使用redis,并不知道去做压力测试,不知道瓶颈在哪,然后redis又被网上的人过度神话,以为只要内存不用完,就不会有瓶颈,取数据都是秒取,存数据都是秒存。上线两天,投票明细的key里的list集合超过10W(LIST里面存了投票时间,投票对象ID,主键ID,投票人ID),读取速度出现断崖式的跌落,从毫秒级变成3秒左右,数据量达到15W后,5秒左右。然后客服就来电话了,说用户说投票太慢了,点一下好久才提示成功,一直转。(他么的,我也是第一次,鬼知道redis会这样),我试着取了下另外一个key的数据(5W左右),发现还是毫秒级,证明key之间没有影响,所以当时的想到的解决方案就是,老子分key,差不多就是name_1,name_2,然后另外放个key存当前key的增量,到5W数据就分key,临时解决投票慢的问题。

总结一下,应该不是条数的问题,和List的长度有关,所以,不要把redis当关系型数据库使用,能分key就分key,然后做好瓶颈测试(现在必做的事之一)。

3.坑之二,redis的update功能

有没有大佬告诉我下,redis能不能Update..不是先取后改再删最后增加的那种。。可以直接用的那种。。。可能是我找的帮助类有问题,反正一直没找到可以直接update的方法。

因为这个问题,和redis本身不能建索引的问题,公司决定弄一台mongodb的服务器(16G)。

接下来说的是公司的另外一个需求,就是app要集成im功能,就是QQ聊天的那种,这就存在一个问题了,推送问题,这个太复杂,所以我们决定用第三方,我就不说名字了,免得有打广告的嫌疑。但是,另外一个问题出现了,好多功能他都收费,而且还不便宜,按我们的需求来开通收费业务,最低估计要每月花3000+,老大一拍板,说,就用它的推送功能和消息的发送功能,其他不用,这2个功能是免费的。(我的心情是何等的卧槽),因为公司产品是3端在跑(内部PC端,内部移动端,客户移动端),IM功能我负责提供接口给移动端,还有PCWEB端的聊天功能,所以考虑到用什么,Mongo弄进来用了一段时间(另外的同事弄了转盘抽奖活动,就是用的mongo),用redis肯定是不行的,因为要存聊天记录(妈的,你们自己说QQ是不是很不安全,啥都存着),存好友关系,存身份信息,所以不能直接用redis来搞,决定用Mongo,因为Mongo支持索引,问题来了,mongo如果用string类型做索引,效率也是不高的,不用的话,关系怎么办(各大用户表的主键都是guid),最后想到的解决方案是,用mongo的objectid做索引,redis用hash存objectid和主键Guid之间的对应关系,瓶颈测试一下,发现30W用户(只测试了这么多,瓶颈是多少我也不知道,有瓶颈了再说吧,内部员工只有7000多人,外部看下了下用户表,才20来W,活跃的才1W不到),存取没有任何延迟的感觉,通过!

4.总结

现在对redis的应用基本就是队列,缓存,做索引关系,mongo针对线上活动的数据存取,新功能开发一般也都用Mongo做数据库,后续同步到sqlserver。

大致都是这样,现在线上redis服务器变成了2台(负载)(新功能,自动打电话的功能),mongo变成了2台,做读写分离。总体来说,用到的项目都很稳定的在运行,暂时没有发现什么问题

谈一谈NOSQL的应用,Redis/Mongo的更多相关文章

  1. NOSQL的应用,Redis/Mongo

    NOSQL的应用,Redis/Mongo 1.心路历程 上年11月份来公司了,和另外一个同事一起,做了公司一个移动项目的微信公众号,然后为了推广微信公众号,策划那边需要我们做一些活动,包括抽奖,投票. ...

  2. 谈一谈Java8的函数式编程(二) --Java8中的流

    流与集合    众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...

  3. 谈一谈泛型(Generic)

    谈一谈泛型 首先,泛型是C#2出现的.这也是C#2一个重要的新特性.泛型的好处之一就是在编译时执行更多的检查. 泛型类型和类型参数 ​ 泛型的两种形式:泛型类型( 包括类.接口.委托和结构 没有泛型枚 ...

  4. 从一张图开始,谈一谈.NET Core和前后端技术的演进之路

    从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...

  5. 谈一谈Elasticsearch的集群部署

      Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性.本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓 ...

  6. 谈一谈iOS事件的产生和传递

    谈一谈iOS事件的产生和传递 1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中. UIApplication会从事件队列中取出最前面的事件,并将事件 ...

  7. 谈一谈对MySQL InnoDB的认识及数据库事物处理的隔离级别

    介绍: InnoDB引擎是MySQL数据库的一个重要的存储引擎,和其他存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(有外键)等.现在Inn ...

  8. 谈一谈APP版本号问题

    如题:谈一谈APP版本号问题 为什么要谈这个问题,周五晚上11~12点,被微信点名,说APP有错,无效的版本号,商城无法下单.我正在准备收拾东西,周末回老家,结果看到这样问题,菊花一紧.我擦,我刚加的 ...

  9. 谈一谈深度学习之semantic Segmentation

    上一次发博客已经是9月份的事了....这段时间公司的事实在是多,有写博客的时间都拿去看paper了..正好春节回来写点东西,也正好对这段时间做一个总结. 首先当然还是好好说点这段时间的主要工作:语义分 ...

  10. 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统

    ***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...

随机推荐

  1. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  2. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  3. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  4. Sublime Text3配置在可交互环境下运行python快捷键

    安装插件 在Sublime Text3下面写代码感觉很不错,但是写Python的时候遇到了一些问题. 用Sublime Text3打开python文件,或者在Sublime Text3下写好pytho ...

  5. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  6. dubbo服务提供与消费

    一.前言 项目中用到了Dubbo,临时抱大腿,学习了dubbo的简单实用方法.现在就来总结一下dubbo如何提供服务,如何消费服务,并做了一个简单的demo作为参考. 二.Dubbo是什么 Dubbo ...

  7. WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...

  8. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  9. javascript中变量提升的理解

    网上找了两个经典的例子 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); // 10 var ...

  10. 著名ERP厂商的SSO单点登录解决方案介绍一

          SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户 ...