tomcat 集群 Redis MySQL 分布式消息发送 Redis锁,MySQL锁问题
开发过程中,遇到消息发送功能,将要发送的消息对象先保存在Redis 队列 +内存队列(双保险),通过多个tomcat集群Quartz 轮询Job(两个集群都有)将消息存储到MySQL(5.5.51)发送表中,再通过多个tomcat集群Quartz 轮询发送Job 查询数据库,进行消息发送。其中遇到的几个问题: 1、多个实例job读取Redis,保存的发送数据重复保存。此问题使用Redis的分布式锁setnx 解决;通过java实现分布式锁RedisLock(部分代码参考网络); import java.util.Random; import org.apache.log4j.Logger; import com.vstation.sys.config.FilesConfig; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.Transaction; public class RedisLock { private static final Logger log = Logger.getLogger(RedisLock.class); //加锁标志 public static final String LOCKED = "TRUE";