redis zset 排序分值(A维度正序+时间维度倒序)如何构建?

该博客探讨了一种将时间秒数值与A维度正序值结合的编码方法,用于生成一个可以按时间顺序排序的分数。通过示例代码展示了如何利用位操作将时间戳和偏移量组合,并在后续时间点进行逆向解码,以恢复原始时间。这种方法对于数据存储和检索的效率提升有重要意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

score = (左边32位放置 A维度正序值) +  (右边32位放置 INT_MAX - 时间秒数值)

package main

import (
    "fmt"
    "time"
)

const INT_MAX = int64(^uint32(0) >> 1)

func main()  {
    fmt.Println(INT_MAX)
    now := time.Now()
    secondes := now.Unix()
    fmt.Println("原时间 = ",secondes)
    offset := int64(29989)
    fmt.Println("原offset = ",offset)

    score := offset << 32 | secondes
    fmt.Println("总分数 = ",score)

    sss := score & 0x7fffffff

    fmt.Printf("sss type %T ", sss )
    fmt.Println("转码时间  = ",sss)
    fmt.Println("转码offset = " , int32(score >> 32))


    time.Sleep(2*time.Second)

    now1 := time.Now().Unix()
    fmt.Println("转码时间now1  = ",now1)
    score1 := offset << 32 | (INT_MAX - now1)

    time.Sleep(2*time.Second)

    now2 := time.Now().Unix()
    fmt.Println("转码时间now2  = ",now2)
    score2 := offset << 32 | (INT_MAX - now2)

    time.Sleep(2*time.Second)

    now3 := time.Now().Unix()
    fmt.Println("转码时间now3  = ",now3)
    score3 := offset << 32 | (INT_MAX - now3)


    // 排序分值
    fmt.Println("总分数1 = ",score1)
    fmt.Println("总分数2 = ",score2)
    fmt.Println("总分数3 = ",score3)

    // 逆推
    fmt.Println("逆推转码时间now1 = ",INT_MAX - score1 & 0x7fffffff)
    fmt.Println("逆推转码时间now2 = ",INT_MAX - score2 & 0x7fffffff)
    fmt.Println("逆推转码时间now3 = ",INT_MAX - score3 & 0x7fffffff)

}

结果:

转码时间now1  =  1623627431
转码时间now2  =  1623627433
转码时间now3  =  1623627435
总分数1 =  128802298095960
总分数2 =  128802298095958
总分数3 =  128802298095956
逆推转码时间now1 =  1623627431
逆推转码时间now2 =  1623627433
逆推转码时间now3 =  1623627435
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自驱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值