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);
}
}
2.range(K key, long start, long end)
获取指定范围内的成员集合(按低到高排序)
package com.ex服务器托管网ample.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 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 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客户端,发现添加了数据,并修改了排名。
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
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
p服务器托管网ublic 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客户端,发现我们确实删除了对应的元素
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客户端的数据。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
为了简单,各种软件和库的名称我就不区分大小写了。 说下为什么使用sqlite,我在选择sqlite前使用了mysql、mongodb这两款数据库,他们很成熟很强大,但是配置起来对于新手要费点时间,考虑到我想要开发CMS是一个很轻量的系统,使用这两个数据库感觉太…