Spring-data-redis: 分布式队列
??? Redis中list数据结构,具有“双端队列”的特性,同时redis具有持久数据的能力,因此redis实现分布式队列是非常安全可靠的。它类似于JMS中的“Queue”,只不过功能和可靠性(事务性)并没有JMS严格。Redis本身的高性能和"便捷的"分布式设计(replicas,sharding),可以为实现"分布式队列"提供了良好的基础.
??? Redis中的队列阻塞时,整个connection都无法继续进行其他操作,因此在基于连接池设计是需要注意。
??? 我们通过spring-data-redis,来实现“同步队列”,设计风格类似与JMS。不过本实例中,并没有提供关于队列消费之后的消息确认机制,如果你感兴趣可以自己尝试实现它。
??? 1) Redis中的"队列"为双端队列,基于list数据结构实现,并提供了"队列阻塞"功能.
??? 2) 如果你期望使用redis做"分布式队列"server,且数据存取较为密集时,务必配置(redis.conf)中关于list数据结构的限制:
二.程序实例:
1) QueueListener:当队列中有数据时,可以执行类似于JMS的回调操作。
public static void main(String[] args) throws Exception{ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-redis-beans.xml");RedisQueue<String> redisQueue = (RedisQueue)context.getBean("jedisQueue");redisQueue.pushFromHead("test:app");Thread.sleep(15000);redisQueue.pushFromHead("test:app");Thread.sleep(15000);redisQueue.destroy();}??? 在程序运行期间,你可以通过redis-cli(客户端窗口)执行“lpush”,你会发现程序的控制台仍然能够正常打印队列信息。
?
?
?
?
?