我们公司用Redis既不是用Redis做缓存从而达到降低直接访问数据库的频率增加数据读取效率的目的,因为我们公司的几乎所有项目都不会有太大的数据读写频率,也不是用Redis来做本地数据库存取一些配置信息,因为这样会显得很傻,使用Sqlite就可以做到这一点,且不需要额外挂载一个Redis服务。那我们公司用Redis干嘛呢?说起来我也比较难以理解,我们公司使用Redis的目的是用来做消息队列的!

Redis的列表数据存取方式中,有大概以下两个数据存储方式ListLeftPush、ListRightPush,就是从数据列表的左边或者右边插入值。有以下两个取数据的方式ListLeftPop、ListRightPop,就是从数据列表的左边或者右边取出数据,并将取出的数据中列表数据中移除。

左出右出

左进右进

相信看懂的人都看懂了,这就是很明显的“左进右出”或者“右进左出”的队列思维。所以,我们公司使用Redis来做消息队列

使用Redis做消息队列的好处就是避免了跨语言之间的通讯协议的问题,比如我们公司经常需要使用C#、C++、Python这三种不同的编程语言进行联合开发,虽然使用Socket协议也可以做多方通讯,但始终觉得不是那么方便,比如说当有多种数据结构的时候,往往不同之间的程序员还得坐下来对一对数据格式和协议。

但是,使用Redis的话,作为消息的发起方只需要将自己写好的数据写到Redis中,消息的接收方按照写入到Redis中的数据格式反序列化数据即可,避免了多方沟通的问题。而对于不能及时答复的消息,也可以使用Redis做淘汰策略,避免消息冗余

结语

相比Socket、MQTT(MQ)、Queue,使用Redis做消息队列,看起来似乎有点笨,但是自由度却非常高!直接抛开复杂的通讯协议,甚至不需要了解任何一种通讯协议就可以做到多方通讯,而且,因为采取先进先出的策略,消息也不会出现插队或者掉队的情况。