时间:2021-07-01 10:21:17 帮助过:25人阅读
public static void SendActivateEmail(int userId) { User user = userDao.getUser(userId); String userName = user.getUserName(); String userEmail = user.getUserEmail(); String subject = "..."; String body = "..."; //调用邮件服务发邮件 }如上,当新用户注册,在注册完成后,会发一封激活邮件,新增用户是insert,发邮件获取用户是select ,如果master slave存在延迟,有可能在这个时候获取不到用户。
public User getUser(int userId, boolean isMaster)由业务层决定要在哪个库操作。 2. 根据具体的业务类型,将读写标志位放到线程上下文中。比如对于注册用户的操作,可以在开始处理的时候,在线程上下文中放入一个标志位master,在所有的dao 方法内,判断该标志位,如果是master,则从master读取。这样读写分离是由具体的业务场景决定的。 对于上面第二种情况 1. 简单的方法,就是在请求参数中再加一个参数,服务端根据参数决定要在哪个库操作, 这样增加了前端的一些工作量。 2. 复杂一点的,可以在服务端处理,当修改了用户信息后,可以在redis或者memcache中新增一条Id记录,5秒过期,每次请求的时候,先到memcache中判断一下,对应的id是否存在,如果存在读master, 否则slave。只是这样无形之中增加了服务端的开销。
数据库读写分离及问题
标签:rpc subject proxy ati 手机 email 类型 cti 简介