Redis缓存知识问题( 三 )

SETNX , 是「SET if Not eXists」的缩写 , 也就是只有不存在的时候才设置 , 可以利用它来实现锁的效果 。

\"提前\"使用互斥锁(mutex key)

在value内部设置1个超时值(timeout1) timeout1比实际的memcache timeout(timeout2)小 。 当从cache读取到timeout1发现它已经过期时候 , 马上延长timeout1并重新设置到cache 。 然后再从数据库加载数据并设置到cache中 。

\"永远不过期:\"

从redis上看 , 确实没有设置过期时间 , 这就保证了 , 不会出现热点key过期问题 , 也就是“物理”不过期 。

从功能上看 , 如果不过期 , 那不就成静态的了吗?所以我们把过期时间存在key对应的value里 , 如果发现要过期了 , 通过一个后台的异步线程进行缓存的构建 , 也就是“逻辑”过期

资源保护:

采用netflix的hystrix , 可以做资源的隔离保护主线程池 , 如果把这个应用到缓存的构建也未尝不可 。

推荐阅读