首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【项目日志|苍穹外卖】Day5:Redis技术实战

【项目日志|苍穹外卖】Day5:Redis技术实战

作者头像
超级苦力怕
发布2025-12-23 17:57:38
发布2025-12-23 17:57:38
2130
举报


完成任务清单

  • 设置店铺营业状态接口
  • 管理端查询店铺营业状态接口
  • 用户端查询店铺营业状态接口

主要功能展示

今天在实现店铺相关接口时,学习到了一个重要的技术点:Redis缓存技术

实现店铺状态接口
Redis的使用

Redis是一个基于内存key-value结构数据库,是互联网技术领域使用最广泛的存储中间件

使用方法

1.导入maven依赖

代码语言:javascript
复制
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置Redis数据源

database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。 port:端口号 host:IP地址,localhost默认代表本机

在application.yml中添加读取application-dev.yml中的相关Redis配置

代码语言:javascript
复制
sky:
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 10    

3.编写配置类,创建RedisTemplate对象

代码语言:javascript
复制
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

4.通过RedisTemplate对象操作Redis

API

返回值类型

说明

redisTemplate.opsForValue()

ValueOperations

操作String类型数据

redisTemplate.opsForHash()

HashOperations

操作Hash类型数据

redisTemplate.opsForList()

ListOperations

操作List类型数据

redisTemplate.opsForSet()

SetOperations

操作Set类型数据

redisTemplate.opsForZSet()

ZSetOperations

操作SortedSet类型数据

redisTemplate

-

通用的命令

使用案例:String

1.设置值

代码语言:javascript
复制
redisTemplate.opsForValue().set("key", "value");

2.获取值

代码语言:javascript
复制
Object value = redisTemplate.opsForValue().get("key");

其他类型的使用方法也是如此,与上面两个例子差不多。

店铺营业状态解决方案

业务场景

店铺只有营业和打烊两个状态,如果为了这么简单的数据单独建表,成本效益不高。其次,店铺营业状态属于高并发请求类型,MySQL的读写性能并不占优势,因此引入了Redis缓存技术

实现思路

1.设置店铺营业存储

代码语言:javascript
复制
public static final String KEY = "SHOP_STATUS";
// 存储值:1-营业中,0-打烊中

2.设置营业状态

代码语言:javascript
复制
    // 设置营业状态
    @PutMapping("/{status}")
    @ApiOperation("设置营业状态")
    public Result setStatus(@PathVariable Integer status){
        log.info("设置营业状态为:{}", status == 1 ? "营业中" : "打烊中");
        redisTemplate.opsForValue().set(KEY, status);
        return Result.success();
    }

3.获取营业状态(管理端)

代码语言:javascript
复制
    // 获取营业状态
    @GetMapping("/status")
    @ApiOperation("获取营业状态")
    public Result<Integer> getStatus(){
        Integer shopStatus = (Integer)redisTemplate.opsForValue().get(KEY);
        log.info("获取营业状态:{}", shopStatus == 1 ? "营业中" : "打烊中");
        return Result.success(shopStatus);
    }

4.获取营业状态(用户端)

代码语言:javascript
复制
@RestController("userShopController")
@RequestMapping("/user/shop")
public class ShopController {
    @Autowired
    private RedisTemplate redisTemplate;
    
    @GetMapping("/status")
    @ApiOperation("获取营业状态")
    public Result<Integer> getStatus(){
        Integer shopStatus = (Integer)redisTemplate.opsForValue().get("SHOP_STATUS");
        log.info("获取营业状态:{}", shopStatus == 1 ? "营业中" : "打烊中");
        return Result.success(shopStatus);
    }
}

Redis的使用拓展

Redis的基本指令使用方案 Redis入门介绍

因为Redis基于内存存储,读写性能高,因此适合处理高并发请求数据,适合存储热点数据。

拓充知识点

1. Redis连接工厂(RedisConnectionFactory)

连接工厂是Spring Data Redis提供的核心组件,负责管理与Redis服务器的连接。

主要功能:

  • 提供Redis连接配置信息(主机地址、端口、密码等)
  • 配置部署方式(单机、主从、哨兵、集群)
  • 设置连接池参数(最大连接数、空闲连接数、等待时间等)

💡 理解要点: 连接工厂就像一个统一的连接管理中心,确保应用程序能够高效、可靠地与Redis服务器通信。

2. Key序列化器(Key Serializer)

Redis只能存储字符串、数字等基本类型,而我们需要存储的往往是Java对象。序列化器负责将Java对象的Key序列化为Redis可接受的字节数组格式。

常见序列化方式:

JDK序列化方式JdkSerializationRedisSerializer(默认方式) String序列化方式StringRedisTemplate(当前使用) JSON序列化方式GenericJackson2JsonRedisSerializerJackson2JsonRedisSerializer

使用String序列化方式的原因

RedisTemplate可以接收任意类型的对象,并默认采用JDK序列化,转成字节形式进行储存,如\xAC\xED\x00\x05t\x00\x06\xE5\x8C\x97\xE4\xBA\xAC

但也因为使用的是JDK序列化,导致可读性差内存占用大的缺点。

因此,我们可以统一使用String序列化器,要求只能存储String类型的Key和Value。当需要存储Java对象时,手动完成对象的序列化和反序列化。这样不仅可以节省额外的内存开销,可读性也更高。

为什么不适用JSON序列化?

使用JSON序列化器虽然可以将Jaava对象自动序列化为JSON字符串。但会记录序列化对应的class名称,如"@class": "com.sky.pojo.user",这样带来了额外的内存开销。


本文为苍穹外卖项目学习笔记,持续更新中…

如果我的内容对你有帮助,希望可以收获你的点赞、评论、收藏。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 完成任务清单
  • 主要功能展示
    • 实现店铺状态接口
      • Redis的使用
      • 店铺营业状态解决方案
  • 拓充知识点
    • 1. Redis连接工厂(RedisConnectionFactory)
    • 2. Key序列化器(Key Serializer)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档