Redis 集合(Set)

Redis 集合(Set)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

实例

redis 127.0.0.1:6379> SADD runoobkey redis
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS runoobkey

1) "mysql"
2) "mongodb"
3) "redis"

在以上实例中我们通过 SADD 命令向名为 runoobkey 的集合插入的三个元素。


Redis 集合命令

下表列出了 Redis 集合基本命令:

序号命令及描述
1SADD key member1 [member2]
向集合添加一个或多个成员
2SCARD key
获取集合的成员数
3SDIFF key1 [key2]
返回给定所有集合的差集
4SDIFFSTORE destination key1 [key2]
返回给定所有集合的差集并存储在 destination 中
5SINTER key1 [key2]
返回给定所有集合的交集
6SINTERSTORE destination key1 [key2]
返回给定所有集合的交集并存储在 destination 中
7SISMEMBER key member
判断 member 元素是否是集合 key 的成员
8SMEMBERS key
返回集合中的所有成员
9SMOVE source destination member
将 member 元素从 source 集合移动到 destination 集合
10SPOP key
移除并返回集合中的一个随机元素
11SRANDMEMBER key [count]
返回集合中一个或多个随机数
12SREM key member1 [member2]
移除集合中一个或多个成员
13SUNION key1 [key2]
返回所有给定集合的并集
14SUNIONSTORE destination key1 [key2]
所有给定集合的并集存储在 destination 集合中
15SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素
### 使用 Spring Boot 和 Redis Set 数据结构实现图书管理系统的示例 #### 创建 Spring Boot 项目并引入依赖项 要构建一个基于 Spring Boot 和 Redis 的图书管理系统,首先需要创建一个新的 Spring Boot 应用程序,并添加必要的 Maven 或 Gradle 依赖来支持 Redis 连接。 对于 Maven 用户,在 `pom.xml` 文件中加入如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- 如果使用Lettuce连接池 --> <dependency> <groupId>io.lettuce.core</groupId> <artifactId>lettuce-core</artifactId> </dependency> ``` #### 配置 Redis 属性 编辑 application.properties 或者 application.yml 来配置 Redis 参数: ```properties # application.properties example spring.redis.host=localhost spring.redis.port=6379 ``` 或者 YAML 格式的配置文件: ```yaml # application.yml example spring: redis: host: localhost port: 6379 ``` #### 编写服务层逻辑处理业务需求 定义 BookService 类来进行书籍相关的 CRUD 操作。这里主要展示如何利用 RedisTemplate 对象执行 SET 命令完成增删改查等功能。 ```java @Service public class BookService { @Autowired private StringRedisTemplate stringRedisTemplate; public void addBook(String bookName){ // 向名为 "books" 的集合中添加一本书名 stringRedisTemplate.opsForSet().add("books", bookName); } public List<String> getAllBooks(){ // 获取所有存储于 "books" 中的成员列表 SetOperations<String, String> setOps = stringRedisTemplate.opsForSet(); return new ArrayList<>(setOps.members("books")); } public boolean removeBook(String bookName){ Long count = stringRedisTemplate.opsForSet().remove("books", bookName); return count != null && count > 0; } } ``` 上述代码片段展示了怎样通过 `StringRedisTemplate` 提供的方法操作 Redis Sets[^1]。 #### 测试功能 编写简单的控制器 Controller 接口以便前端可以发送 HTTP 请求访问这些 API 方法;也可以直接在 JUnit 单元测试里验证各个函数的行为是否符合预期。 ```java @RestController @RequestMapping("/api/books") public class BookController { @Autowired private BookService bookService; @PostMapping("/add/{bookName}") public ResponseEntity<Void> add(@PathVariable String bookName) { this.bookService.addBook(bookName); return ResponseEntity.ok().build(); } @GetMapping("/") public ResponseEntity<List<String>> listAll() { List<String> books = this.bookService.getAllBooks(); return ResponseEntity.ok(books); } @DeleteMapping("/{bookName}") public ResponseEntity<Boolean> delete(@PathVariable String bookName) { Boolean result = this.bookService.removeBook(bookName); return ResponseEntity.ok(result); } } ``` 此部分实现了 RESTful Web Service 接口,允许客户端应用程序与服务器端交互以管理书籍记录[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值