从入门到精通【Redis】如何在Java中采用Redis以及将Redis集成到Spring Boot


特此注明 :
Designed By :长安城没有风
Version:1.0
Time:2025.09.06
Location:辽宁 · 大连

1. 渐进式遍历

SCAN​

Redis 使用 scan 命令进行渐进式遍历键,进而解决直接使用 keys 获取键时可能出现的阻塞问题。每次 scan 命令的时间复杂度是 O(1),但是要完整地完成所有键的遍历,需要执行多次 scan。

在这里插入图片描述

首次 scan 从 0 开始,当 scan 返回的下次位置为 0 时, 遍历结束. ​
语法:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type] 1
返回值:下一次 scan 的游标(cursor)以及本次得到的键。​
时间复杂度:O(1)
示例:
redis 127.0.0.1:6379> scan 0
1) "17"
2) 1) "key:12"
2) "key:8"
3) "key:4"
4) "key:14"
5) "key:16"
6) "key:17"
7) "key:15"
8) "key:10"
9) "key:3"
10) "key:7"
11) "key:1"
redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
2) "key:18"
3) "key:0"
4) "key:2"
5) "key:19"
6) "key:13"
7) "key:6"
8) "key:9"
9) "key:11"

渐进性遍历 scan 虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删 除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑。

2. 数据库管理

切换数据库

语法:select dbIndex

许多关系型数据库,例如 MySQL 支持在一个实例下有多个数据库存在的,但是与关系型数据库用字符来区分不同数据库名不同,Redis 只是用数字作为多个数据库的实现。Redis 默认配置中是有 16 个数据库。select 0 操作会切换到第一个数据库,select 15 会切换到最后一个数据库。0 号数据库和 15 号数据库保存的数据是完全不冲突的,即各种有各自的键值对。默认情况下,我们处于数据库 0。

在这里插入图片描述

Redis 中虽然支持多数据库,但随着版本的升级,其实不是特别建议使用多数据库特性。如果真的需要完全隔离的两套键值对,更好的做法是维护多个 Redis 实例,而不是在一个 Redis 实例中维护多数据库。这是因为本身 Redis 并没有为多数据库提供太多的特性,其次无论是否有多个数据库,Redis 都是使用单线程模型,所以彼此之间还是需要排队等待命令的执行。同时多数据库还会让开发、调试和运维工作变得复杂。所以实践中,始终使用数据库 0 其实是一个很好的选择。​

清除数据库

flushdb / flushall 命令用于清除数据库,区别在于 flushdb 只清除当前数据库,flushall 会清除所有数据库。

3. Redis在Java中的使用

✏️3.1 引入依赖

Java 操作 redis 的客户端有很多,其中最知名的是 jedis。
jedis官方文档

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.3.2</version>
</dependency>
✏️3.2 配置端⼝转发

Redis 服务器安装在云服务器上,⽽我们编写的代码则是在本地主机。要想让本地主机能访问 redis,需要把 redis 的端⼝通过云服务器后台⻚⾯的 “防⽕墙” / “安全组” 放开端⼝到公⽹上,但是这个操作⾮常危险(⿊客会顺着 redis 端⼝进来)。因此我们可以使⽤端⼝转发的⽅式,直接把服务器的 redis 端⼝映射到本地。

在Tabby中配置端口转发

配置与链接 --> 端口 --> 添加端口转发

此时,访问本地的 8888,就相当于访问对应服务器的 6379(Tabby和服务器必须是处于在线的状态,这样的映射才有效)

在这里插入图片描述

修改Redis配置文件允许远程连接

  1. 打开redis.conf 文件:
cd /etc/redis
vim redis.conf
  1. 修改以下两行配置:
# 允许任何主机连接、访问
bind 127.0.0.1 改为 bind 0.0.0.0
# 关闭保护模式
protected-mode yes 改为 protected-mode no
  1. 重启redis服务
service redis-server restart
  1. 验证是否连接成功
import redis.clients.jedis.Jedis;
public class RedisTest
{
public static void main(String[] args) {
Jedis jedis = new Jedis("tcp://127.0.0.1:8888");
System.out.println(jedis.ping());
jedis.close();
}
}

在这里插入图片描述

✏️3.3 基本操作

点击跳转查看操作代码

4. Redis集成到 Spring Boot

✏️4.1 使⽤ Spring Boot 连接 Redis 单机

创建项⽬
勾选 NoSQL 中的 Spring Data Redis
在这里插入图片描述
配置 redis 服务地址

spring:
application:
name: demo
data:
redis:
host: 127.0.0.1
port: 8888

创建Controller

package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
public class Controller
{
@Autowired
private StringRedisTemplate stringRedisTemplate;
@RequestMapping("/test")
public String test() {
stringRedisTemplate.opsForValue().set("k1", "v1");
return "test";
}
@RequestMapping("/get")
public String get() {
return stringRedisTemplate.opsForValue().get("k1");
}
}

请自行查询关于Redis操作命令的具体API实现

posted @ 2025-09-10 11:24  yfceshi  阅读(1)  评论(0)    收藏  举报