redis失效是怎么实现的
-
Redis失效是通过设置键的过期时间来实现的。Redis中的每个键可以设置一个过期时间,一旦键的过期时间到达,该键将会被自动删除。下面是Redis失效的具体实现过程:
-
设置键的过期时间:
使用以下命令可以设置键的过期时间:EXPIRE key seconds其中,key为要设置过期时间的键,seconds为过期时间,单位为秒。过期时间可以是一个整数值,代表多少秒后键会过期;也可以是一个UNIX时间戳,代表具体的过期时间点。
-
获取键的过期时间:
使用以下命令可以获取键的剩余过期时间:TTL key该命令返回一个整数值,代表键的剩余过期时间,单位为秒。如果键已经过期或者不存在,返回-2。如果键没有设置过期时间,返回-1。
-
删除键:
当键的过期时间到达后,Redis会将该键自动删除。也可以使用以下命令手动删除键:DEL key该命令用于删除指定的键。
-
持久化:
Redis还提供了持久化功能,可以将数据写入磁盘,以防止数据丢失。持久化有两种方式:- 快照持久化:将数据以快照的形式写入磁盘。可以通过以下命令创建快照:
SAVE - AOF持久化:将所有对Redis的写操作以追加的方式写入磁盘。可以通过以下命令开启AOF持久化:
CONFIG SET appendonly yes通过以上命令配置后,每执行一次写操作,Redis都会将该操作追加到AOF文件中。
- 快照持久化:将数据以快照的形式写入磁盘。可以通过以下命令创建快照:
通过设置键的过期时间,Redis可以自动删除过期的键。同时,还可以通过持久化功能将数据写入磁盘,以保证数据的持久性。这使得Redis在缓存和其他场景中得到广泛应用。
1年前 -
-
-
过期时间(Expiration Time):Redis中的键值对可以设置过期时间,当键值对的过期时间到了之后,该键值对就会被自动删除。可以使用命令
EXPIRE <key> <seconds>来设置一个键值对的过期时间,当时间到期后,Redis会自动删除该键值对。 -
惰性删除(Lazy Deletion):Redis的惰性删除是指在读取键值对的时候,如果该键值对已经过期,Redis会检查当前键值对的过期时间是否小于当前的时间,如果是的话,就将该键值对删除。这样就避免了在设置键值对时就进行删除操作,提高了效率。
-
定期删除(Eviction):Redis使用定期删除来回收过期键值对的内存空间。Redis会定期检查数据库中的键值对,如果发现有过期的键值对,就会将其删除。定期删除的频率可以通过
hz配置项进行调整。 -
内存淘汰策略(Memory Eviction Policy):当Redis的内存空间不足时,为了腾出更多的空间给新的键值对使用,Redis会根据设置的内存淘汰策略来选择一些键值对进行删除。常见的淘汰策略有:LRU(最近最少使用)、LFU(最不经常使用)、Random(随机选择)等。
-
订阅和通知(Pub/Sub):通过订阅和通知机制,Redis可以实现在键值对过期时触发一些操作,如发送通知,执行回调函数等。可以使用命令
PTTL <key>获取键值对的剩余过期时间,当剩余过期时间小于等于0时,即为过期。然后可以通过订阅相应的频道或者设置相应的回调函数来处理过期事件。
1年前 -
-
Redis的失效是通过设置过期时间来实现的。当一个键设置了过期时间后,Redis会在指定的时间过期之后自动将该键删除。
下面是Redis失效的具体实现方式:
- 过期策略
Redis使用的是惰性过期和定期过期相结合的策略来处理失效。具体可以分为以下几步:
- 在设置键的过期时间之后,键并不会立即被删除,而是保留在数据库中,等待定期过期处理。
- 定期过期的策略是通过定时器来实现的,Redis会每隔一段时间(默认为10秒)对在过期字典中随机抽取一部分键进行检测,判断是否过期,如果过期则删除。
- 惰性过期的策略是在读取键的时候检查键是否过期,如果过期则立即删除。
-
过期字典
Redis使用一个过期字典来保存带有过期时间的键值对。过期字典的底层实现是一个跳跃表,可以快速访问和删除键值对。 -
内存回收
当一个键过期并被删除后,对应的内存空间并不会立即被回收。Redis使用了一种内存回收策略叫做惰性方式。当 Redis 的内存使用达到一定阈值时,会启动内存回收机制,通过释放废弃键的内存空间来进行内存回收。
需要注意的是,Redis并没有精确的实时过期处理机制,而是通过惰性过期和定期过期相结合的策略来处理过期键。因此,在实际应用中,不能完全依赖Redis的过期机制来进行数据有效性的保证。如果对数据的过期时间要求比较严格,可以在应用层面进行实时检测和处理。
1年前 - 过期策略