1为什么要设置redis过期时间
Redis 设置过期时间的意思是为一个 key 设置一个时间窗口,在这个时间窗口内,该 key 可以被访问和使用,到达时间窗口后,Redis 会自动删除过期的 key。可以使用 Redis 的 expire 命令或其他相关命令来设置一个 key 的过期时间。设置过期时间可以有效控制 Redis 中存储的数据量,避免占用过多的内存资源。同时,也可以通过过期时间来实现 Redis 中一些常见的应用场景,例如缓存、限流、分布式锁等。
补充
在 Redis 中,过期时间一到并不意味着键就会立即被删除。Redis 会以惰性删除的方式删除过期键,即在读取键的时候判断该键是否过期,如果过期则删除该键。这种删除方式虽然会导致过期键在一段时间内仍然占用内存空间,但是可以避免在非常频繁的情况下进行键的删除操作,从而提高 Redis 的性能。但是,如果 Redis 中的键长期没有被访问,过期时间也过了,而且内存空间也非常紧张,这时 Redis 可能会采用主动清理过期键的方式来释放内存空间。因此,如果对于 Redis 中的过期键需要立即删除,则可以使用 DEL 命令手动删除该键,stringRedisTemplate.delete(key);
或者使用 EXPIRE 命令将该键的过期时间重置为一个小于当前时间的值,以达到立即删除的效果。
Redis 的过期删除是异步的。当一个键过期时,Redis 并不会立即将其删除,而是将过期键添加到一个专门的待删除列表中,然后由单独的线程在后台异步删除这些过期键。这种异步删除的方式可以避免 Redis 在处理大量过期键时的性能瓶颈,并且在并发访问的情况下也能保证数据的一致性。同时,Redis 也提供了主动清理过期键的机制,当访问 Redis 中的键时,如果发现某个键已经过期,则 Redis 会立即删除该键。这种惰性删除的方式也是 Redis 提高性能的一种方式。需要注意的是,在 Redis 中,即使某个键已经过期,也不一定会立即被删除,因为 Redis 会定期地检查待删除列表,并删除那些过期时间已到的键。
2设置过期时间的分布式锁应用场景
可以通过 Redis 设置过期时间的特性来实现分布式锁。具体实现方法如下:
3应用分布式锁的时候
redis应用到分布式锁的时候过期时间是一定要要设置的吗?
当 Redis 应用到分布式锁的时候,过期时间并不是一定要设置的,但是设置过期时间可以有效避免因为某个客户端异常导致锁一直被占用而无法被其他客户端获取的情况,从而避免出现死锁或者长时间的等待。在分布式系统中,很难保证所有客户端都按照正常的流程执行,因此为分布式锁设置过期时间可以更加安全地保护共享资源。同时,在设置过期时间的时候,应该根据业务的实际情况和系统的负载来调整过期时间,以达到既能保证并发安全,又能尽量避免因为过期时间过短而频繁获取锁、因为过期时间过长而导致资源被长时间占用的效果。