RedisTemplate.opsForZet()的使用
  19qMgiCiiRfc 2023年11月22日 20 0

RedisTemplate.opsForZet()是RedisTemplate类提供的用于操作Zset类型(有序集合)的方法。它可以用于对Redis中的Zset数据结构进行各种操作。添加、删除、排序、获取。

一、常用方法介绍

方法

说明

add(K key, V value, double score)

向指定的key中添加元素,按照score进行排序

range(K key, long start, long end)


获取指定范围内的成员集合(按低到高排序)

reverseRange(K key, long start, long end)

获取指定范围内的成员集合(按高到低排序)

incrementScore(K key, V v1, double delta)

增加key对应的集合中元素v1的score值,并返回增加后的值

score(K key, Object o)


获取key对应集合中元素o的score值

zCard(K key)


获取集合大小

count(K key, double min, double max)

获取指定分数范围内的成员数量

rank(K key, Object o)

获取指定元素在集合中的排序(从低到高排序)

reverseRank(K key, Object o)


获取指定元素在集合中的排序(从高到低排序)

remove(K key, Object… values)

移除集合中指定的值

二、方法使用

1.add(K key, V value, double score)

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void testAdd() {
        String key = "news";
        redisTemplate.opsForZSet().add(key, "新闻1", 1);
        redisTemplate.opsForZSet().add(key, "新闻2", 3);
        redisTemplate.opsForZSet().add(key, "新闻3", 2);
    }
}

RedisTemplate.opsForZet()的使用_redis

2.range(K key, long start, long end)

获取指定范围内的成员集合(按低到高排序)

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void testRange() {
        String key = "news";
        // range(key,0,-1)获取所有数据
        Set<String> set = redisTemplate.opsForZSet().range(key, 0, -1);
        System.out.println(set);
    }
}

输出:

[新闻1, 新闻3, 新闻2]

3.reverseRange(K key, long start, long end)

获取指定范围内的成员集合(按高到低排序)

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void testReverseRange() {
        String key = "news";
        Set<String> set = redisTemplate.opsForZSet().reverseRange(key, 0, -1);
        System.out.println(set);
    }
}

输出:

[新闻2, 新闻3, 新闻1]

4.incrementScore(K key, V v1, double delta)

增加key对应的集合中元素v1的score值,并返回增加后的值

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void testIncrementScore() {
        String key = "news";
        // 我们给新闻1增加3分
        Double score = redisTemplate.opsForZSet().incrementScore(key, "新闻1", 3);
        System.out.println(score);
    }
}

执行后刷新redis客户端,发现添加了数据,并修改了排名。

RedisTemplate.opsForZet()的使用_zset_02

5.score(K key, Object o)

获取key对应集合中元素o的score值

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void testScore() {
        String key = "news";
        // 获取指定key集合中元素'新闻1'的score值
        Double score = redisTemplate.opsForZSet().score(key, "新闻1");
        System.out.println(score);
    }
}

输出:

4.0

6.zCard(K key)

获取集合大小

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void testZCard() {
        String key = "news";
        Long count = redisTemplate.opsForZSet().zCard(key);
        System.out.println(count);
    }

}

输出:

3

7.rank(K key, Object o)

获取指定元素在集合中的排序(从低到高排序),排序从0开始

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

  
    @Test
    void testRank() {
        String key = "news";
        //获取元素'新闻1'在集合中从低到高的排序
        Long rank = redisTemplate.opsForZSet().rank(key, "新闻1");
        System.out.println(rank);
    }

}

输出:

2

RedisTemplate.opsForZet()的使用_redis_03

8.reverseRank(K key,Object o)

获取指定元素在集合中的排序(从高到低排序)

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;
    @Test
    void testReverseRank() {
        String key = "news";
        //获取元素'新闻1'在集合中从低到高的排序
        Long rank = redisTemplate.opsForZSet().reverseRank(key, "新闻1");
        System.out.println(rank);
    }
}

输出:

0

9.remove(K key, Object… values)

移除集合中指定的值

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;
    @Test
    void testRemove() {
        String key = "news";
        //移除元素'新闻1'
        redisTemplate.opsForZSet().remove(key, "新闻1");
    }
}

执行后刷新redis客户端,发现我们确实删除了对应的元素

RedisTemplate.opsForZet()的使用_redis_04

10.count(K key, double min, double max)

获取指定分数范围内的成员数量

package com.example.mydemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

/**
 * @author qx
 * @date 2023/11/8
 * @des opsForZet()方法测试
 */
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void testCount() {
        String key = "news";
        // 获取分数在0-2之间的元素数量
        Long count = redisTemplate.opsForZSet().count(key, 0, 2);
        System.out.println(count);
    }
}

输出:

1

我们查看redis客户端的数据。

RedisTemplate.opsForZet()的使用_redis_05

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月22日 0

暂无评论

推荐阅读
19qMgiCiiRfc