redis sortedset实现推送

添加推送id

@Test
    public void c() throws InterruptedException {
        int i = 0;
        while (true) {
            int sum = (int) Math.round(Math.random() * 100000);
            int random = (int) Math.round(Math.random() * 10);
            i += random;
            double timestamp = System.currentTimeMillis();
            timestamp += 100 * i;
            redisTemplate.opsForZSet().add("zSetValue", sum, timestamp);
            System.out.println("插入了id:" + sum + " " + new Date(new BigDecimal(timestamp).longValue()));
            Thread.sleep(200);
        }
    }

add(key,value,score) redis sortedset会根据score进行排序

获取推送id

@Test
    public void d() throws InterruptedException {
        while (true) {
            long size = redisTemplate.opsForZSet().size("zSetValue");
            if (size > 10) {
                Set<String> zSetValue = redisTemplate.opsForZSet().range("zSetValue", 0, 20);
                //System.out.println("通过range(K key, long start, long end)方法获取指定区间的元素:" + zSetValue);
                long timestamp = System.currentTimeMillis();
                long timestamp1 = System.currentTimeMillis() - 1000 * 5;
                if (CollectionUtils.isEmpty(zSetValue)) {
                    Thread.sleep(300);
                } else {
                    for (Iterator<String> iterator = zSetValue.iterator(); iterator.hasNext(); ) {
                        Object i = iterator.next();
                        double time = redisTemplate.opsForZSet().score("zSetValue", i);
                        if (time >= timestamp1 && time < timestamp) {
                            System.out.println("时间为:" + new Date(new BigDecimal(time).longValue()) + "获取到推送id:" + i);
                            redisTemplate.opsForZSet().remove("zSetValue", i);
                        } else if (time > timestamp) {
                            break;
                        } else if (time < timestamp1) {
                            redisTemplate.opsForZSet().remove("zSetValue", i);
                        }
                    }
                }
            }
        }
    }

score(key,value)获取score数值

实际可以使用定时器去获取,如果在分布式环境在处理逻辑(删除key的时候)进行统一记录,如果被处理了就不做处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值