【RedisTemplate】Set数据类型的常用操作
引言
上篇博客总结了使用RedisTemplate操作ZSet数据类型的一些常用方法,本篇博客继续总结Set数据类型。
Set数据结构
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
常用方法
1. 增加集合元素
/*** set中增加元素,支持一次增加多个元素,逗号分隔即可,结果返回添加的个数** @param key* @param value* @return*/
public Long addSet(String key, Object... value) {Long size = null;try {size = redisTemplate.opsForSet().add(key, value);} catch (Exception e) {log.error("[RedisUtils.addSet] [error]", e);return size;}return size;
}
示例代码
@Test
public void addSet() {System.out.println(redisUtils.addSet("word-book", "article", "boy", "cat", "dog", "English"));System.out.println(redisUtils.addSet("chinese-word", "年", "月", "日"));
}
2. 移除指定元素
/*** set中移除指定元素** @param key* @param value* @return*/
public Long removeSet(String key, Object value) {Long size = null;try {size = redisTemplate.opsForSet().remove(key, value);} catch (Exception e) {log.error("[RedisUtils.removeSet] [error]", e);return size;}return size;
}
示例代码
@Test
public void removeSet() {//key和value能查询到,返回1;存在对应的key,value不存在,返回0System.out.println(redisUtils.removeSet("word-book", "cat"));//key不存在,异常,返回nullSystem.out.println(redisUtils.removeSet("111", "cat"));
}
3. 计算集合大小
/*** 计算set集合大小** @param key* @return*/
public Long countSet(String key) {Long size = null;try {size = redisTemplate.opsForSet().size(key);} catch (Exception e) {log.error("[RedisUtils.countSet] [error]", e);}return size;
}
示例代码
@Test
public void countSet() {//key存在,返回个数System.out.println(redisUtils.countSet("word-book"));//key不存在,异常System.out.println(redisUtils.countSet("111"));
}
4. 判断集合中是否存在某元素
/*** 判断set中是否存在某元素** @param key* @param value* @return*/
public Boolean hasMemberSet(String key, Object value) {Boolean exist = false;try {exist = redisTemplate.opsForSet().isMember(key, value);} catch (Exception e) {log.error("[RedisUtils.hasNumberSet] [error]", e);}return exist;
}
示例代码
@Test
public void hasMemberSet() {//key和value存在,返回trueSystem.out.println(redisUtils.hasMemberSet("word-book", "boy"));//key存在,value不存在,返回falseSystem.out.println(redisUtils.hasMemberSet("word-book", "111"));//key不存在,异常System.out.println(redisUtils.hasMemberSet("111", "111"));
}
5. 随机获取集合中的一个元素
/*** 随机获取set中的一个元素** @param key* @return*/
public Object randomMember(String key) {Object o = null;try {o = redisTemplate.opsForSet().randomMember(key);} catch (Exception e) {log.error("[RedisUtils.randomMember] [error]", e);}return o;
}
示例代码
@Test
public void randomMember() {//key存在,返回元素System.out.println(redisUtils.randomMember("word-book"));//key不存在,异常System.out.println(redisUtils.randomMember("111"));
}
6. 随机获取集合中的元素(指定个数,可能重复)
/*** 随机获取指定个数的元素(可能重复)** @param key* @param num* @return*/
public List<Object> randomMembers(String key, Integer num) {List<Object> o = null;try {o = redisTemplate.opsForSet().randomMembers(key, num);} catch (Exception e) {log.error("[RedisUtils.randomMember] [error]", e);}return o;
}
示例代码
@Test
public void randomNumMember() {//key存在,随机返回5个,可能重复System.out.println(redisUtils.randomMembers("word-book", 5));
}
7. 随机获取集合中的元素(指定个数,不重复)
/*** 随机获取集合内指定个数的元素(不重复)** @param key* @param num* @return*/
public Set<Object> distinctRandomMembers(String key, Integer num) {Set<Object> o = null;try {o = redisTemplate.opsForSet().distinctRandomMembers(key, num);} catch (Exception e) {log.error("[RedisUtils.randomMember] [error]", e);}return o;
}
示例代码
@Test
public void distinctRandomNumMember() {//key存在,返回不重复的5个元素System.out.println(redisUtils.distinctRandomMembers("word-book", 5));
}
8. 随机移除一个元素
/*** 随机移除一个元素** @param key* @return*/
public Object popMember(String key) {Object o = null;try {o = redisTemplate.opsForSet().pop(key);} catch (Exception e) {log.error("[RedisUtils.popMember] [error]", e);}return o;
}
示例代码
@Test
public void popMember() {//key存在,返回删除的元素System.out.println(redisUtils.popMember("word-book"));
}
9. 获取集合内的所有元素
/*** 获取key下的所有元素** @param key* @return*/
public Set<Object> members(String key) {Set<Object> result = null;try {result = redisTemplate.opsForSet().members(key);} catch (Exception e) {log.error("[RedisUtils.members] [error]", e);}return result;
}
示例代码
@Test
public void members() {System.out.println(redisUtils.members("chinese-word"));
}
10. 移动元素
/*** 将key1集合中的元素value移到key2集合中** @param key1* @param value* @param key2* @return*/
public Boolean moveMember(String key1, Object value, String key2) {Boolean result = false;try {result = redisTemplate.opsForSet().move(key1, value, key2);} catch (Exception e) {log.error("[RedisUtils.moveMember] [error]", e);}return result;
}
示例代码
@Test
public void moveMember() {System.out.println(redisUtils.moveMember("word-book", "article", "chinese-word"));System.out.println(redisUtils.members("word-book"));System.out.println(redisUtils.members("chinese-word"));
}
11. 两个集合取交集(两个key之间)
/*** 两个key之间取交集** @param key* @param key2* @return*/
public Set<Object> intersectMember(String key, String key2) {Set<Object> result = null;try {result = redisTemplate.opsForSet().intersect(key, key2);} catch (Exception e) {log.error("[RedisUtils.intersectMember] [error]", e);}return result;
}
示例代码
@Test
public void intersectMember() {System.out.println(redisUtils.addSet("set-one", "one", "two", "three", "four", "five"));System.out.println(redisUtils.addSet("set-two", "one", "three", "ten", "nine"));System.out.println(redisUtils.intersectMember("set-one", "set-two"));
}
12. 集合取交集(一个key与多个key之间)
/*** 一个集合与多个集合之间取交集** @param key* @param key2* @return*/
public Set<Object> multiIntersectMember(String key, Set<String> key2) {Set<Object> result = null;try {result = redisTemplate.opsForSet().intersect(key, key2);} catch (Exception e) {log.error("[RedisUtils.multiIntersectMember] [error]", e);}return result;
}
示例代码
@Test
public void multiIntersectMember() {System.out.println(redisUtils.addSet("set-three", "three", "eight", "seven"));Set<String> set = new HashSet<>();set.add("set-three");set.add("set-two");System.out.println(redisUtils.multiIntersectMember("set-one", set));
}
13. 集合取交集,并放入指定集合
/*** 取交集并放入key3集合** @param key1* @param key2* @param key3*/
public Long storeIntersectMember(String key1, String key2, String key3) {Long result = null;try {result = redisTemplate.opsForSet().intersectAndStore(key1, key2, key3);} catch (Exception e) {log.error("[RedisUtils.storeIntersectMember] [error]", e);}return result;
}
示例代码
@Test
public void storeIntersectMember() {System.out.println(redisUtils.intersectMember("set-one", "set-two"));System.out.println(redisUtils.members("set-four"));System.out.println(redisUtils.storeIntersectMember("set-one", "set-two", "set-four"));System.out.println(redisUtils.members("set-four"));
}
14. 集合取并集(两个集合之间)
/*** 求并集** @param key1* @param key2* @return*/
public Set<Object> unionMember(String key1, String key2) {Set<Object> objects = null;try {objects = redisTemplate.opsForSet().union(key1, key2);} catch (Exception e) {log.error("[RedisUtils.unionMember] [error]", e);}return objects;
}
示例代码
@Test
public void unionMember() {System.out.println(redisUtils.unionMember("set-one", "set-two"));
}
15. 集合取并集(一个集合与多个集合之间)
/*** 求并集(一个集合与多个集合之间)** @param key1* @param keys* @return*/
public Set<Object> multiUnionMember(String key1, Set<String> keys) {Set<Object> objects = null;try {objects = redisTemplate.opsForSet().union(key1, keys);} catch (Exception e) {log.error("[RedisUtils.multiUnionMember] [error]", e);}return objects;
}
示例代码
@Test
public void multiUnionMember() {Set<String> set = new HashSet<>();set.add("set-three");set.add("set-two");System.out.println(redisUtils.multiUnionMember("set-one", set));
}
【RedisTemplate】Set数据类型的常用操作相关推荐
- SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例
场景 SpringDataRedis环境搭建(详细图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/104989029 ...
- redis安装、持久化、数据类型、常用操作、操作键值、安全设置、慢查询日志、存储session、主从配置、集群介绍、集群搭建配置、集群操作,php安装redis扩展...
21.9 redis介绍 21.10 redis安装 21.11 redis持久化 21.12 redis数据类型 21.13/21.14/21.15 redis常用操作 21.16 redis操作键 ...
- python入门之数据类型及常用操作
1.数字 int(整型) 在32位机上,整数的位数为32位,取值范围为-231~231-1 在64位机上,整数的位数为64位,取值范围为-263~263-1 long(长整型) python中没有指定 ...
- python特征数据类型及常用操作对比_更高效的利用Jupyter+pandas进行数据分析,6种常用数据格式效率对比!...
在使用Python进行数据分析时,Jupyter Notebook是一个非常强力的工具,在数据集不是很大的情况下,我们可以使用pandas轻松对txt或csv等纯文本格式数据进行读写. 然而当数据集的 ...
- python特征数据类型及常用操作对比总结_如何全面解析数据并创造数据故事
介绍 "讲故事"的主意是极好的:将一个想法或事件变成一个故事.它将想法带进生活,并为其增添了乐趣.这发生在我们的日常生活中.无论我们陈述一个有趣的事件还是新发现,故事总是吸引听众和 ...
- python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...
一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...
- redis数据类型及常用数据操作
redis数据类型及操作 1 官方文档(大全) 2 String-字符串 3 Hash-字典 4 List-列表 5 Set-无序集合 6 Sorted Set-有序集合 7 Pub/Sub-订阅/发 ...
最新文章
- CentOS 6.4下PXE+Kickstart无人值守安装操作系统
- AI之FL:联邦学习(Federated Learning)的简介、入门、应用之详细攻略
- 【杂谈】为何有三AI只做原创,从不转载
- 追洞小组 | Jdbc反序列化漏洞复现浅析
- hessian矩阵与鞍点关系浅析
- java内存高水位_jvm(1)---java内存结构
- html项目列表页面源码,HTML 列表
- 未发现数据源名称并且未指定默认驱动程序_看我如何发现NVIDIA GeForce Experience代码执行漏洞...
- Kafka : kafka重启报错 ZkClient allready closed
- PHP和原生JS实现九型人格在线测试(144题)
- 手工雕刻图纸_鬼斧神工--木雕手工雕刻技法
- Win11打印机脱机了怎么重新连接?Win11打印机脱机的解决方法
- android截图保存在哪,电脑f12截屏一般保存在什么位置 | 手游网游页游攻略大全...
- python实现12306自助刷票下单
- 高德地图缩放比例问题解决
- 智能洗地机好不好用、洗地机和扫地机哪个实用?十大洗地机测评
- 《Leaflet 进阶知识点》- L.polygon 多边形绘制详解
- 网络分层的真实含义是什么?
- QQ宠物智能辅助开发
- 在日本,虚拟人都能赚百万美元了