引言

上篇博客总结了使用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数据类型的常用操作相关推荐

  1. SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例

    场景 SpringDataRedis环境搭建(详细图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/104989029 ...

  2. 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操作键 ...

  3. python入门之数据类型及常用操作

    1.数字 int(整型) 在32位机上,整数的位数为32位,取值范围为-231~231-1 在64位机上,整数的位数为64位,取值范围为-263~263-1 long(长整型) python中没有指定 ...

  4. python特征数据类型及常用操作对比_更高效的利用Jupyter+pandas进行数据分析,6种常用数据格式效率对比!...

    在使用Python进行数据分析时,Jupyter Notebook是一个非常强力的工具,在数据集不是很大的情况下,我们可以使用pandas轻松对txt或csv等纯文本格式数据进行读写. 然而当数据集的 ...

  5. python特征数据类型及常用操作对比总结_如何全面解析数据并创造数据故事

    介绍 "讲故事"的主意是极好的:将一个想法或事件变成一个故事.它将想法带进生活,并为其增添了乐趣.这发生在我们的日常生活中.无论我们陈述一个有趣的事件还是新发现,故事总是吸引听众和 ...

  6. python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  7. python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  8. java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...

    一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...

  9. redis数据类型及常用数据操作

    redis数据类型及操作 1 官方文档(大全) 2 String-字符串 3 Hash-字典 4 List-列表 5 Set-无序集合 6 Sorted Set-有序集合 7 Pub/Sub-订阅/发 ...

最新文章

  1. CentOS 6.4下PXE+Kickstart无人值守安装操作系统
  2. AI之FL:联邦学习(Federated Learning)的简介、入门、应用之详细攻略
  3. 【杂谈】为何有三AI只做原创,从不转载
  4. 追洞小组 | Jdbc反序列化漏洞复现浅析
  5. hessian矩阵与鞍点关系浅析
  6. java内存高水位_jvm(1)---java内存结构
  7. html项目列表页面源码,HTML 列表
  8. 未发现数据源名称并且未指定默认驱动程序_看我如何发现NVIDIA GeForce Experience代码执行漏洞...
  9. Kafka : kafka重启报错 ZkClient allready closed
  10. PHP和原生JS实现九型人格在线测试(144题)
  11. 手工雕刻图纸_鬼斧神工--木雕手工雕刻技法
  12. Win11打印机脱机了怎么重新连接?Win11打印机脱机的解决方法
  13. android截图保存在哪,电脑f12截屏一般保存在什么位置 | 手游网游页游攻略大全...
  14. python实现12306自助刷票下单
  15. 高德地图缩放比例问题解决
  16. 智能洗地机好不好用、洗地机和扫地机哪个实用?十大洗地机测评
  17. 《Leaflet 进阶知识点》- L.polygon 多边形绘制详解
  18. 网络分层的真实含义是什么?
  19. QQ宠物智能辅助开发
  20. 在日本,虚拟人都能赚百万美元了

热门文章

  1. 【微信公众号】怎么办理信息系统安全等级保护备案证明?
  2. 为什么那么多人执着于写博客
  3. 转变磁盘格式(转成gpt)
  4. Android手机应用CTA认证自测
  5. PHP生成图形验证码
  6. cass简码大全_cass 简码识别
  7. CoAP协议学习笔记 1.3 用UDP工具来调试CoAP
  8. cvs数据格式 gps_运动手表GPS轨迹文件导出方法
  9. 数据库(mysql)之事务和存储引擎
  10. WinRM 服务无法创建以下 SPN: /WSMAN/DC.contoso.com; WSMAN/DC