for*_*ack 10
由于您使用的是缓存,因此必须忍受数据不一致的问题,即在某些时候,缓存中的数据不同于数据库中的数据。
只要更改了值,就无需更新缓存中的值。否则,整个缓存系统将非常复杂(例如,您必须维护已缓存的键的列表),并且也可能不需要这样做(例如,键值只能使用一次,而无需使用进行更新)。
我们如何更新缓存中的数据并保持缓存系统简单?
通常,除了在缓存中设置或更新键/值对外,我们还为每个键设置aTIMEOUT。之后,客户端可以从缓存中获取键值对。但是,如果键达到超时,则缓存系统将从缓存中删除键值对。这称为THE KEY HAS BEEN EXPIRED。下次,客户端尝试从缓存中获取该密钥时,将一无所获。这称为CACHE MISS。在这种情况下,客户端必须从数据库中获取键值对,并将其更新为具有新超时的缓存。
如果数据库中的数据已更新,而密钥在缓存中尚未过期,则客户端将获得不一致的数据。但是,当密钥过期时,它将从数据库中检索其值,并由某些客户端将其插入到缓存中。之后,其他客户端将获得更新的数据,直到再次更改数据为止。
如何设置超时时间?
通常,有两种到期策略:
N秒/分钟/小时为单位过期...较大的超时可以大大减少数据库的负载,而数据可能很长一段时间都已过期。较小的超时可以使数据尽可能保持最新,而数据库将负担沉重。因此,在设计超时时必须权衡取舍。
Redis如何使密钥失效?
Redis有两种使密钥失效的方法: