大佬的位运算代码解析

本文介绍了如何使用Redis的ZSet存储组合信息,如创建时间和过期时间,并通过位操作在score中压缩存储。代码示例展示了如何将两个值编码到score中以及如何解析它们。利用这种方法,可以实现业务中的惰性删除策略,通过协程检查过期元素。这种方法提高了存储效率,同时确保了数据的正确读取。
摘要由CSDN通过智能技术生成

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位)这样就拿出了过期时间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值