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. 通过一个demo了解Redux

    TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...

  2. StringMVC 中如何做数据校验

    步骤一:引入四个jar包 步骤二:注册类型转换器 <context:component-scan base-package="cn.happy.controller"> ...

  3. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  4. 为你的Web程序加个启动画面

    .Net开发者一定熟悉下面这个画面: 这就是宇宙第一IDE Visual Studio的启动画面,学名叫Splash Screen(或者Splash Window).同样,Javar们一定对Eclip ...

  5. 谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  6. UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器、实体手机、PC)中应用的Log等文件

    在开发中或者后期测试乃至最后交付使用的时候,如果应用出问题了我们一般的做法就是查看Log文件.上章也提到了查看Log文件,这章重点讲解下如何查看Log文件?如何找到我们需要的Packages安装包目录 ...

  7. Effective java笔记(二),所有对象的通用方法

    Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...

  8. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  9. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  10. 安卓GreenDao框架一些进阶用法整理

    大致分为以下几个方面: 一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值 一.查询指令整理 1.链式执行的指令 return mDaoSession. ...