INCR有一些特别之处。如果我们可以通过一些代码自己完成这样的操作,为什么我们提供这样的操作呢?毕竟它很简单:
x = GET count
x = x + 1
SET count x
问题是只要有一个客户端使用密钥,以这种方式进行增量只会起作用。看看如果两个客户端同时访问此密钥会发生什么:
-
客户端A将计数读为10。
-
客户端B读取计数为10。
-
客户端A递增10并将计数设置为11。
-
客户端B递增10并将计数设置为11。
我们希望价值为12,而不是11!这是因为以这种方式递增值不是原子操作。在Redis中调用 INCR命令可以防止这种情况发生,因为它是一个原子操作。Redis在不同类型的数据上提供了许多这些原子操作。
Redis可以被告知密钥应该只存在一段时间。这是通过EXPIRE和TTL命令完成的。
SET resource:lock "Redis Demo"
这会导致密钥资源:锁定在120秒内被删除。您可以使用TTL命令测试密钥的存在时间。它返回将被删除的秒数。
TTL resource:lock => 113
TTL resource:lock => -2
键的TTL的-2表示该键不再存在(不再)。一个-1的TTL钥匙意味着它永远不会过期。请注意,如果您设置了一个键,它的TTL将被重置。
SET resource:lock "Redis Demo 1"
TTL resource:lock => 119
SET resource:lock "Redis Demo 2"
TTL resource:lock => -1