zset score如何传两(或者N)个值?
err := redis.ZAddNX(key, redigo.Z{
Member: pid,
Score: float64((now << 24) | int64(seconds)),
}).Err()
如何解析出来?
func expiredAt(score int64) int64 {
return int64(score)>>24 + (int64(score) & 0xFFFFFF)
}
为什么要这么写?
因为业务原因。所以需要在zset的score里存两个值,一个创建时间,一个过期时间,
之后利用协程进行惰性删除
代码解析
如图,把上面的数字向左移24位,空出24位0用来存放过期时间的二进制(上图第三步,或运算)
然后取值的时候把score向右移24位就能拿出创建时间了,而过期时间就要用score·与·一下16进制的24个1(要把24位之前的干掉,只留后24位)这样就拿出了过期时间