Redis中的数据过期策略主要是通过设置过期时间(expiration time)来实现的。当一个键(key)设置了过期时间后,在过期时间到达之后,该键会被自动删除并释放内存。
Redis的数据过期策略是基于惰性删除(lazy deletion)和定期删除(periodic deletion)两种方式。
1. 惰性删除:在对一个键进行读写操作时,Redis会检查该键是否过期,如果过期则会立即删除。这种方式确保了过期键被及时删除,但也带来了一定的性能开销,因为每次操作都需要进行过期键的检查。
2. 定期删除:Redis会以一定的频率,通过在每个数据操作命令中随机抽取一些键进行过期检查和删除。该频率通过`hz`配置项进行设置,默认为每秒10次。定期删除可以保证过期键及时被删除,同时减轻了惰性删除带来的性能开销。
Redis并不是立即在键过期后立即删除,而是在键被访问时才进行过期检查。这是因为通过惰性删除和定期删除机制,Redis能够更好地平衡过期键的删除和性能之间的关系。
需要注意的是,定期删除并不保证每次都会删除所有过期键,因为删除操作是在一个固定的频率内进行的。而且,即使过期键没有被删除,当访问到过期键时,在对该键进行读写操作时,Redis会立即进行惰性删除。
通过设置键的过期时间,Redis提供了一种灵活和简单的方式来管理数据的有效期,帮助用户实现过期数据自动清理,减少无效数据的存储和内存占用。同时,过期策略的设计也保证了Redis的性能,并避免了频繁的过期键检查操作。