Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value、NoSQL数据库,并提供多种语言的API。 它支持存储的value包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 它常用于高并发场景,能够访问访问海量数据,查询效率也非常高。
通过set key value [EX seconds] [PX millseconds] [NX][XX]设置过期的时间以避免key大量堆积。通过NX模式判定该key资源是否被占用,如果返回为ok,则表示被占用,那么该线程将会阻塞等待。否则获取该资源。
使用List作为队列,RPUSH生产消息,LPOP消费消息
缺点:没有等待队列里有值就直接消费弥补:可以通过在应用层引入Sleep机制去调用LPOP重试BLPOP key [key …] timeout : 阻塞直到队列里有消息或超时 缺点: 只能供一个消费者消费
pub/sub: 主题订阅者模式
发送者(pub)发送消息,订阅者(pub)接收消息订阅者可以订阅任意数量的频道缺点: 消息的发布是无状态的,无法保证可达,如果消费者在生产者发布消息时下线,消费者重新上线将无法收到。