1、
kafka是消息中间件,原理就是一个队列用来保存所有发布的消息,等到客户端一上线就推送给客户端。发布订阅模式。所有消息都保存在磁盘上。
2、redis是非关系型数据库,也有发布订阅的功能。

区别:
kafka是保存在磁盘上,一般用于性能要求不高的场景(日志)而且kafka是保存在磁盘上,一般用于数据量很大的场合。而且kafka设置消息过期时间是以segment为单位的,不能对每个消息都设置过期时间。
而redis是保存在内存上,一般用于高并发的场景,而且内存有限所以用于数据量较小的场合。redis可以对每个数据都设置自己的过期时间。
而且由于redis是保存在内存,所以服务器一旦宕机,内容丢失,安全性不好。

发布订阅中间件相比于直接发送接收的好处:
服务器TCP发送,客户端TCP接受消息,服务器和客户端之间是耦合的,必须要服务器和客户端同时在线才可以完成。
而借助于中间件,可以完成服务器和客户端之间的一个解耦。服务器直接把消息发布到kafka中间件,kafka保存下来,等到客户端上线在推送给客户端。

所有中间件的作用最主要的是完成客户端和服务器之间的解耦。不需要服务器和客户端同时在线,将消息的发送接收由同步变为异步。

redis过期删除策略
1、主动删除
对每个消息都设置一个定时器,时间到则删除此数据
2、惰性删除
每次使用get获取数据时,看key是否设置了过期时间,看有没有到时间,若过期则删除此内容,返回nil(空)
3、定期检查
设置定时器,每过一段时间对所有设置了期限的key进行检查,删除过期内容。
定期检查和惰性删除可以同时存在。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐