ARTS-Tip 补12.17

Redis 的使用场景思考

问题引入

我们的现状是两个产品用一套代码,分开部署。

这种就要求两边的功能需求是一致的,现实中也确实是,不过里面的数据是不一样的,正好有一个需求,是每天初始化一个数据到保存的版本,这个数据对两个产品是不同的,于是在代码里判断了环境,初始化不同的数据。考虑后来写入db, 这样就不用判断环境了。然后别人提议写入 redis, 这样也不用区分环境了,然后就写入db还是redis 的问题,进行了思考。

Redis的定位是什么

缓存。

缓存的作用是什么?提高系统性能,提高吞吐量。缓存是怎么做的呢?把需要缓存的数据加载到内存,这样使用的时候就不用去数据库查,减少了磁盘IO,大大提高了性能。

高并发场景下临时数据库。

在高并发场景下,数据是来不及写入数据库的。这时候就发挥了内存数据库的作用,直接处理用户请求,异步写入持久化。这样大大提高系统可用。

分布式锁。

在分布式系统里,常常需要异步执行,但是为了保证执行一次,就需要像多线程一样获得锁,Redis的单线程设计天然适合做这个。

还有其他应用场景不再描述。

该如何选择

看自己业务场景。

如果是用来缓存数据。那么就不适合和db并驾齐驱。源数据应该存放在db里, 这样再做join查询时会很方便。而且,这时缓存只是一个辅助系统,把系统性能提高,就算没有缓存,系统也照样可用。很明显,本人面对的问题,需要放入db, 不适合把源数据存入缓存。