公司某个项目使用了redis进行数据的快速写入与查询,但在测试中发现它的查询速度完全不敌MySQL.经过代码分析发现,我们的架构师来了个奇葩操作.Redis与MySQL的关联,也就是先从Redis中查出相关数据在循环查询MySQL来获取完整数据,对于这种操作只能认为架构的脑袋被电梯夹了,在没有什么借口可以解释.好多人都是这样,对新技术有点皮毛了解就想"大显身手",结果就闹得很是尴尬.

       大家知道Redis是非关系型数据库,特点就是"快",那我们直接把想要的数据全部存入Redis中,不做任何关联.

       这个问题解决之后又发现了一个新问题,Redis在多线程高并发下出现数据错乱,也就是A的数据给了B,B的数据给到了C....

分析:程序是多线程并且高并发情况,而Redis是单线程,也就是程序在Redis驱动返回结果时发生了张冠李戴的现象.

解决方法:Redis操作方法添加线程锁(lock),让其他线程排队.

Logo

更多推荐