Redis缓存数据库SaaS多租户实现⽅案
⼀、前⾔
上2个章节已经实现了mysql和MongoDB的多租户切实现⽅案,本章将继续学习Redis的多数据源切换。
Redis开源的使⽤C语⾔编写、⽀持⽹络、可基于内存亦可⽀持持久化的⽇志型、key-value数据库,并提供多种语⾔的API。
Redis服务器默认有16个database,我们可以将每个租户的数据放到其中⼀个database中,也可以部署多台Redis服务器,每个租户使⽤⼀个Redis服务器,也可以把两者结合起来,Redis服务器部署多台,先在⼀台的16个Database上放,放满了16个Database然后再往下⼀台Redis服务器上放。这种⽅式需要有⼀个MySQL数据库表存储每台Redis服务器的Database使⽤情况,这个实现⽅式也很简单,就不在本⽂中进⾏实现了,还是主要介绍本次的重点Redis多数据源的切换。
mongodb和mysql结合
⼆、实现⽅案
既然前⾯已经有了MySQL和MongoDB的实现⽅案,Redis的实现⽅案也很清晰了,Redis的实现⽅案与MongoDB的⽅案很类似,只是MongoDB使⽤的数据源,⽽Redis使⽤的是连接⼯⼚RedisConnectionFactory。
1、⾸先我们需要⼀个Map来保存各租户与Redis连接⼯⼚的映射关系
2、然后需要⼀个ThreadLocal来保存当前线程的Redis连接⼯⼚,获取Redis连接⼯⼚的时候取当前线程的Redis连接⼯⼚,设置Redis连接⼯⼚的时候设置到当前线程中。
3、因为我们使⽤Redis的时候,⼀般是使⽤RedisTemplate来对Redis数据库进⾏操作,所以我们在注⼊RedisTemplate这个bean的时候,不能使⽤默认的RedisTemplate,要使⽤我们⾃定义