RedisTemplate中zset类型的使用
简述
- 上一文中简述了使用StringRedisTemplate操作redis中的set类型,今天来记录一下操作zset类型的主要方法
代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class ZSetDemo {
@Autowired
private StringRedisTemplate redisTemplate;
@Test
public void test1() {
//向集合中插入元素,并设置分数
redisTemplate.opsForZSet().add("ranking-list", "p1", 2.1);
//向集合中插入多个元素
DefaultTypedTuple<String> tuple1 = new DefaultTypedTuple<String>("p2", 1.1);
DefaultTypedTuple<String> tuple2 = new DefaultTypedTuple<String>("p3", 3.1);
redisTemplate.opsForZSet().add("ranking-list", new HashSet<>(Arrays.asList(tuple1, tuple2)));
//打印
printZSet("ranking-list");
}
@Test
public void test2() {
printZSet("ranking-list");
//从集合中删除指定元素
redisTemplate.opsForZSet().remove("ranking-list", "p1");
printZSet("ranking-list");
}
@Test
public void test3() {
//为指定元素加分
Double score = redisTemplate.opsForZSet().incrementScore("ranking-list", "p1", 2);
System.out.println(score);//返回加分后的得分
printZSet("ranking-list");
}
@Test
public void test4() {
//返回指定成员的排名(从小到大)
Long rank = redisTemplate.opsForZSet().rank("ranking-list", "p1");
//从大到小
Long reverseRank = redisTemplate.opsForZSet().reverseRank("ranking-list", "p1");
System.out.println(rank);
System.out.println(reverseRank);
}
@Test
public void test5() {
//返回集合内元素的排名,以及分数(从小到大)
Set<TypedTuple<String>> tuples = redisTemplate.opsForZSet().rangeWithScores("ranking-list", 0, -1);
for (TypedTuple<String> tuple : tuples) {
System.out.println(tuple.getValue() + " : " + tuple.getScore());
}
}
@Test
public void test6() {
//返回集合内元素在指定分数范围内的排名(从小到大)
Set<String> ranking = redisTemplate.opsForZSet().rangeByScore("ranking-list", 0, 5);
System.out.println(ranking);
//带偏移量和个数,下例意为从第二个开始,要三个
Set<String> ranking2 = redisTemplate.opsForZSet().rangeByScore("ranking-list", 0, 5, 1, 3);
System.out.println(ranking2);
//也可以带分数返回,类似于test5
}
@Test
public void test7() {
//返回集合内指定分数范围的成员个数
Long count = redisTemplate.opsForZSet().count("ranking-list", 0, 2);
System.out.println(count);
//返回集合内的成员个数
Long size = redisTemplate.opsForZSet().size("ranking-list");//等同于zCard(key);
System.out.println(size);
}
@Test
public void test8() {
//获得指定元素的分数
Double score = redisTemplate.opsForZSet().score("ranking-list", "p1");
System.out.println(score);
}
@Test
public void test9() {
//删除指定索引范围的元素
printZSet("ranking-list");
redisTemplate.opsForZSet().removeRange("ranking-list", 0, 0);
printZSet("ranking-list");
}
@Test
public void test10() {
//删除指定分数范围内的元素
printZSet("ranking-list");
redisTemplate.opsForZSet().removeRangeByScore("ranking-list", 4, 5);
printZSet("ranking-list");
redisTemplate.opsForZSet();
}
//求交集并集与set类似
private void printZSet(String key) {
//按照排名先后(从小到大)打印指定区间内的元素, -1为打印全部
Set<String> range = redisTemplate.opsForZSet().range(key, 0, -1);
//reverseRange 从大到小
System.out.println(range);
}
}
小礼物走一走,来简书关注我
RedisTemplate中zset类型的使用的更多相关文章
- 7、Redis中对ZSet类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ---------- ...
- RedisTemplate与zset
Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有 ...
- Redis自学笔记–Zset类型及管理简述
Zset类型 ...
- 详解Java 8中Stream类型的“懒”加载
在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...
- SQL 中不同类型的表连接
http://www.linuxidc.com/Linux/2012-08/68035.htm 1.简介 在关系型数据库中,join操作是将不同的表中的数据联合在一起时非常通用的一种做法.首先让我们看 ...
- Object-C中动态类型对象相关操作汇总
Object-C(以后简称OC)中有id类型,相对于明确定义类型的静态类型,称为动态类型. 使用动态类型,配合多态(不同类型拥有同名方法),动态绑定(运行时决定实际调用的方法)可以将很多判断延迟到运行 ...
- MYSQL中 ENUM 类型
MYSQL中 ENUM 类型的详细解释 ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串(&quo ...
- 第66课 C++中的类型识别
1. 类型识别 (1)在面向对象中可能出现下面的情况 ①基类指针指向子类对象 ②基类引用成为子类对象的别名 ▲静态类型——变量(对象)自身的类型(定义变量类型时类型或参数类型) ▲动态类型——指针(引 ...
- 【翻译自nikic大神】PHP中原生类型的方法
引言 第一次,翻译别人的文章,用四级英语的水平来翻译~~囧,可能有很多不太恰当的地方,尽管拍砖(有些地方实在想不到恰当的翻译,我同时贴出了原文和自己很low的翻译). 翻译这篇文章用了我3个晚上一个中 ...
随机推荐
- 如何用纯 CSS 绘制一个世界上不存在的彭罗斯三角形
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RyvgMZ 可交互视频教 ...
- 稀疏矩阵三元组快速转置(转poklau123写的很清楚)
关于稀疏矩阵的快速转置法,首先得明白其是通过对三元表进行转置.如果误以为是对矩阵进行转置,毫无疑问就算你想破脑袋也想不出个所以然,别陷入死胡同了! 对于一个三元表,行为i,列为j,值为v.需将其i与j ...
- VS Code 配置碰到的问题
VS Code 呈现缩进参考线以及语法高亮改变 找到 首选项——>设置→搜索renderIntentGuides→将此选项改为true(默认为false),就可以了.
- git简易操作手册
从远程仓库新建 $ git clone https://github.com/xxxr/Repository.git $ cd Repository/ $ git config --global us ...
- Windows 聚焦的锁屏壁纸设置为桌面壁纸
需求: Windows的锁屏壁纸偶尔遇到非常喜欢的壁纸,想设置为桌面壁纸. 步骤如下: 1. “Windows 聚焦”的锁屏壁纸都保存在隐藏文件夹 --- Assets里. a. 打开“资源管理器 b ...
- Spring Boot热部署插件
在实际开发中,我们修改某些代码逻辑功能或页面都需要重启应用,这无形中降低了开发效率,热部署是指当我们修改代码后,服务能自动重启加载新修改的内容,而不需要重启应用,这样大大提高了我们开发的效率. Spr ...
- new和delete用法小结
在C语言中是利用库函数 malloc 和 free 函数来分配和撤销内存的.C++提供了较简便而功能较强的运算符 new 和 delete 来取代 malloc 和 free 函数. new 和 de ...
- Java常用类库——观察者设计模式
观察者设计模式 现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到.实际上以上的购房者都属于观察者,他们都关注着房子的价格. 如果要想实现观察者模式,则必须依 ...
- windows下遍历文件夹下的文件
#include <io.h>#include <stdio.h>#include <iostream>using namespace std;int ReadSt ...
- JavaScript入门学习之一——初级语法
JavaScript是前端编辑的一种编程语言(不同于html,html是一种标记语言),所以和其他的编程语言一样,我们将会从下面几点学习 基础语法 数据类型 函数 面向对象 JavaScript的组成 ...