redis夯实之路-键过期与发布订阅详解

发布时间:2024年01月13日

设置键的生存时间或过期时间

Setex(单位s),expire(s),pexpire(ms)可以设置键的生存时间,

Expirate,pexpirate设置键的过期时间(timestamp的时间戳)

Ttl和pttl返回键的剩余生存时间

RedisDb结构的expires字典保存了数据库的所有键的过期时间,称为过期字典。键是指向键对象的指针,值是longlong类型的整数,一个ms精度的unix时间戳

Persist可以移除键的过期时间

判断过期键

如果过期字典存在键,unix时间戳大于过期时间,键已经过期

过期键删除策略:定时删除,惰性删除,定期删除

1.定时删除:使用定时器,过期时间来临时进行删除。

2.惰性删除:获取键时检测是否过期,过期则删除。

3.定期删除:每隔一段时间随机抽取一些设置了过期时间的键,检测键是否过期,清理过期键。

Redis使用的是惰性删除,定期删除两种策略:获取键时检查是否过期,周期性检查。

Redis在键的过期时间到达之后并不会立即清除,过期键可能仍然存在一段时间,直到Redis检查到过期执行删除操作。如果需要确保即时删除过期键,可以使用DEL命令主动删除过期键。


也可以通过配置参数?maxmemory来限制Redis使用的内存大小,当内存达到限制时,Redis会根据所采用的内存淘汰策略来淘汰一些数据以释放内存空间。

发布与订阅

客户端使用subscribe订阅频道或模式

订阅关系保存在服务器状态的pubsub_channels字典里,字典的键为被订阅的频道,值为客服端的链表

订阅频道

使用subscribe订阅频道,服务器会将客服端和被订阅的频道在pubsub_channels字典中关联。如果频道没有任何订阅者,需要在pubsub_channels字典中新建一个该频道的键。客服端(订阅者)会被添加到值的链表的末尾。

退订频道

使用unsubscribe退订频道,在pubsub_channels字典中会在链表中删除退订的客户端。如果频道没有任何订阅者,需要删除该频道。

发送消息

使用publish向频道发送消息时,会将消息发送给频道的所有订阅者,然后将消息发送给所有和频道相匹配的模式的订阅者

文章来源:https://blog.csdn.net/qq_61282807/article/details/135461487
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。