(七)Spring Boot学习——Redis使用

有部分内容是常用的,为了避免每次都查询数据库,将部分数据存入Redis。

一、 下载并安装 Redis

Windows 版的 Redis 官方已不再维护,你可以使用 微软提供的 Redis for Windows 版本 或者 使用 WSL(Windows Subsystem for Linux)安装 Redis

  1. 下载 Redis for Windows

  2. 解压并进入 Redis 目录

    cd C:\Redis

  3. 启动 Redis 服务器

    redis-server.exe redis.windows.conf

  4. 验证 Redis 是否启动 打开另一个 命令行窗口(CMD),输入:

    redis-cli.exe ping

    如果返回:

    PONG

    说明 Redis 服务器已成功启动 🎉。

二、 配置 Redis

1. 添加 Redis 依赖

如果使用 Maven ,在 pom.xml 添加:

XML 复制代码
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-redis</artifactId> 
</dependency>

⚠️ Spring Boot 2.0+ 默认使用 Lettuce,而不是 Jedis。如果要使用 Jedis,需要额外添加依赖

XML 复制代码
<dependency> 
    <groupId>redis.clients</groupId> 
    <artifactId>jedis</artifactId> 
</dependency>

✅ 2. 配置 Redis 连接

application.ymlapplication.properties 配置 Redis 连接信息。

🔹 application.properties 配置

XML 复制代码
#配置redis
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.password=
spring.data.redis.database=0
spring.data.redis.timeout=5000ms
spring.data.redis.lettuce.pool.max-active=8
spring.data.redis.lettuce.pool.max-idle=8
spring.data.redis.lettuce.pool.min-idle=0
spring.data.redis.lettuce.pool.max-wait=-1ms

⚠️ 注意:

  • host:Redis 服务器地址
  • port:Redis 端口(默认 6379)
  • password:如果 Redis 没有密码,保持为空
  • database:选择 Redis 数据库(默认 0)
  • timeout:连接超时时间(5 秒)

✅ 3. 编写 Redis 工具类

可以使用 RedisTemplate 来操作 Redis。

🔹 RedisConfig.java

创建一个 Redis 配置类,注入 RedisTemplate

java 复制代码
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 使用 String 序列化 key,避免乱码
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

✅ 4. 在 Service 中使用 Redis

你可以直接在 RedisService 中使用 RedisTemplate 提供的方法来存取数据。

🔹 (1) 操作字符串

Redis 的 opsForValue() 主要用于存取字符串数据:

java 复制代码
@Service
public class RedisService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // 存储字符串数据
    public void setString(String key, String value, long timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    // 获取字符串数据
    public String getString(String key) {
        return (String) redisTemplate.opsForValue().get(key);
    }

    // 删除 Key
    public void deleteKey(String key) {
        redisTemplate.delete(key);
    }
}

✅ 2. 操作哈希表(Hash)

Redis 的 opsForHash() 适用于存储对象、键值对等。

java 复制代码
@Service
public class RedisHashService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // 设置 Hash 值
    public void setHash(String key, String field, String value) {
        redisTemplate.opsForHash().put(key, field, value);
    }

    // 获取 Hash 值
    public Object getHash(String key, String field) {
        return redisTemplate.opsForHash().get(key, field);
    }

    // 获取整个 Hash 对象
    public Map<Object, Object> getAllHash(String key) {
        return redisTemplate.opsForHash().entries(key);
    }

    // 删除 Hash 字段
    public void deleteHashField(String key, String field) {
        redisTemplate.opsForHash().delete(key, field);
    }
}

示例

redisHashService.setHash("user:1001", "name", "Tom"); String name = redisHashService.getHash("user:1001", "name"); // "Tom"


✅ 3. 操作列表(List)

Redis opsForList() 适用于存储列表数据(如消息队列、排行榜等)。

java 复制代码
@Service
public class RedisListService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // 左侧推入列表
    public void leftPush(String key, String value) {
        redisTemplate.opsForList().leftPush(key, value);
    }

    // 右侧推入列表
    public void rightPush(String key, String value) {
        redisTemplate.opsForList().rightPush(key, value);
    }

    // 获取列表范围
    public List<Object> getListRange(String key, long start, long end) {
        return redisTemplate.opsForList().range(key, start, end);
    }

    // 弹出左侧元素
    public Object leftPop(String key) {
        return redisTemplate.opsForList().leftPop(key);
    }
}

示例

redisListService.leftPush("queue", "task1");

redisListService.leftPush("queue", "task2");

List<Object> tasks = redisListService.getListRange("queue", 0, -1); // ["task2", "task1"]


✅ 4. 操作集合(Set)

Redis opsForSet() 适用于存储无序唯一集合(如标签、好友列表等)。

java 复制代码
@Service
public class RedisSetService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // 添加集合元素
    public void addToSet(String key, String value) {
        redisTemplate.opsForSet().add(key, value);
    }

    // 获取集合中的所有元素
    public Set<Object> getSetMembers(String key) {
        return redisTemplate.opsForSet().members(key);
    }

    // 删除集合中的某个元素
    public void removeFromSet(String key, String value) {
        redisTemplate.opsForSet().remove(key, value);
    }
}

示例

redisSetService.addToSet("users", "Alice");

redisSetService.addToSet("users", "Bob");

Set<Object> users = redisSetService.getSetMembers("users"); // ["Alice", "Bob"]


✅ 5. 在 Controller 中调用

你可以在 Controller 里调用 RedisService 来测试 Redis 的使用:

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/redis")
public class RedisController {

    @Autowired
    private RedisService redisService;

    // 存储 Key-Value
    @PostMapping("/set")
    public String setKey(@RequestParam String key, @RequestParam String value) {
        redisService.setString(key, value, 3600);
        return "存储成功";
    }

    // 获取 Key 的值
    @GetMapping("/get")
    public String getKey(@RequestParam String key) {
        return redisService.getString(key);
    }

    // 删除 Key
    @DeleteMapping("/delete")
    public String deleteKey(@RequestParam String key) {
        redisService.deleteKey(key);
        return "删除成功";
    }
}
相关推荐
jz_ddk3 分钟前
[学习]RTKLib详解:convkml.c、convrnx.c与geoid.c
c语言·开发语言·学习
小鹿撞出了脑震荡10 分钟前
汇编学习——iOS开发对arm64汇编的初步了解
汇编·学习·ios
小鹿撞出了脑震荡29 分钟前
「OC」源码学习—— 消息发送、动态方法解析和消息转发
学习·ios·objective-c
caihuayuan542 分钟前
前端面试2
java·大数据·spring boot·后端·课程设计
茯苓gao44 分钟前
stm32 串口通讯 和 USART学习 二(HEX和文本数据包收发)
stm32·嵌入式硬件·学习
cliff,1 小时前
数据提取之BeautifulSoup4快速使用
笔记·python·学习
大刘讲IT1 小时前
轻量化工业互联网平台在中小制造企业的垂直应用实践:架构、集成、数据价值与选型策略
大数据·学习·程序人生·架构·数据挖掘·能源·制造
yy鹈鹕灌顶1 小时前
Redis 基础详解:从入门到精通
数据库·redis·缓存
Camellia03111 小时前
嵌入式学习--江协51单片机day2
嵌入式硬件·学习·51单片机
郭尘帅6661 小时前
SpringBoot学习(上) , SpringBoot项目的创建(IDEA2024版本)
spring boot·后端·学习