SpringBoot高级篇Redis之Set数据结构使用姿势

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: SpringBoot高级篇Redis之Set数据结构使用姿势

Redis的五大数据结构,前面讲述了String和List,Hash的使用姿势,接下来就是Set集合,与list最大的区别就是里面不允许存在重复的数据


I. 基本使用



在开始之前,序列化的指定需要额外处理,上一篇已经提及,相关内容可以参考:

  • 181109-SpringBoot高级篇Redis之List数据结构使用姿势


1. 新增元素


新增元素时,可以根据返回值来判断是否添加成功, 如下面的单个插入时,如果集合中之前就已经有数据了,那么返回0,否则返回1


/**
 * 新增一个  sadd
 *
 * @param key
 * @param value
 */
public void add(String key, String value) {
    redisTemplate.opsForSet().add(key, value);
}
复制代码


2. 删除元素


因为list是有序的,所以在list的删除需要指定位置;而set则不需要


/**
 * 删除集合中的值  srem
 *
 * @param key
 * @param value
 */
public void remove(String key, String value) {
    redisTemplate.opsForSet().remove(key, value);
}
复制代码


3. 判断是否存在


set一个最大的应用场景就是判断某个元素是否有了,从而决定怎么执行后续的操作, 用的是 isMember方法,来判断集合中是否存在某个value


/**
 * 判断是否包含  sismember
 *
 * @param key
 * @param value
 */
public void contains(String key, String value) {
    redisTemplate.opsForSet().isMember(key, value);
}
复制代码


4. 获取所有的value


set无序,因此像list一样获取某个范围的数据,不太容易,更常见的方式就是全部获取出来


/**
 * 获取集合中所有的值 smembers
 *
 * @param key
 * @return
 */
public Set<String> values(String key) {
    return redisTemplate.opsForSet().members(key);
}
复制代码


5. 集合运算


set还提供了另外几个高级一点的功能,就是集合的运算,如求并集,交集等操作,虽然在我有限的业务应用中,并没有使用到这些高级功能,下面依然个给出使用的姿势


/**
 * 返回多个集合的并集  sunion
 *
 * @param key1
 * @param key2
 * @return
 */
public Set<String> union(String key1, String key2) {
    return redisTemplate.opsForSet().union(key1, key2);
}
/**
 * 返回多个集合的交集 sinter
 *
 * @param key1
 * @param key2
 * @return
 */
public Set<String> intersect(String key1, String key2) {
    return redisTemplate.opsForSet().intersect(key1, key2);
}
/**
 * 返回集合key1中存在,但是key2中不存在的数据集合  sdiff
 *
 * @param key1
 * @param key2
 * @return
 */
public Set<String> diff(String key1, String key2) {
    return redisTemplate.opsForSet().difference(key1, key2);
}



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
40 5
|
13天前
|
存储 消息中间件 缓存
Redis 5 种基础数据结构?
Redis的五种基础数据结构——字符串、哈希、列表、集合和有序集合——提供了丰富的功能来满足各种应用需求。理解并灵活运用这些数据结构,可以极大地提高应用程序的性能和可扩展性。
22 2
|
25天前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
37 5
|
1月前
|
开发者
除了交集运算,Set 类型还可以用于哪些数据结构的操作?
【10月更文挑战第30天】`Set`类型在数据结构操作方面提供了丰富的功能和便利,能够帮助开发者更高效地处理各种数据集合相关的任务,提高代码的简洁性和性能。
|
1月前
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
28 3
|
1月前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
2月前
|
存储 消息中间件 NoSQL
Redis 数据结构与对象
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求和数据特点来选择合适的数据结构,并合理地设计数据模型,以充分发挥 Redis 的优势。
58 8
|
2月前
|
存储 NoSQL 关系型数据库
Redis 有序集合(sorted set)
10月更文挑战第17天
78 4
|
2月前
|
存储 NoSQL Java
介绍下Redis 的基础数据结构
本文介绍了Redis的基础数据结构,包括动态字符串(SDS)、链表和字典。SDS是Redis自实现的动态字符串,避免了C语言字符串的不足;链表实现了双向链表,提供了高效的操作;字典则类似于Java的HashMap,采用数组加链表的方式存储数据,并支持渐进式rehash,确保高并发下的性能。
介绍下Redis 的基础数据结构
|
2月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
40 4