前言

        今天学习的内容个人感觉比较少,主要是以redis基础为主,将项目功能作为redis案例。redis在企业开发当中算是个热门,所以今天这篇 以redis为重。有基础的同学可以直接实现完店铺状态进到day06。

 《苍穹外卖day04》:学生党学习笔记——黑马程序员Java项目实战《苍穹外卖》——Day04套餐管理-CSDN博客


视频学习链接黑马程序员Java项目实战《苍穹外卖》,最适合新手的SpringBoot+SSM的企业级Java项目实战_哔哩哔哩_bilibili

资料网盘链接1、黑马程序员Java项目《苍穹外卖》企业级开发实战_免费高速下载|百度网盘-分享无限制

本人项目远程仓库sky-take-out: 黑马程序员Java项目实战《苍穹外卖》,最适合新手的SpringBoot+SSM的企业级Java项目实战


一、Redis简介

        Redis(Remote Dictionary Server,远程字典服务器)是一款开源的高性能键值对(Key-Value)NoSQL 数据库,由 Salvatore Sanfilippo 开发并维护,采用 ANSI C 语言编写,遵循 BSD 协议,兼具内存存储持久化多数据结构支持等核心特性,被广泛应用于缓存消息队列会话存储实时统计等场景。


数据类型

       Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

数据结构                                        典型用途
字符串 string                         缓存、计数器、分布式锁
哈希 hash                                存储对象(如用户信息)
列表 list                                消息队列、最新消息列表
集合 set                                去重、交集 / 并集计算(如共同好友)

       有序集合 sorted set / zset        排行榜、延迟队列

具体的操作及使用放在之后,大家先有一个简单的概念。


Redis下载安装入门

下载地址

Redis安装包分为 Windows 版和 Linux 版:

Windows版下载地址:https://github.com/microsoftarchive/redis/releases

Linux版下载地址: https://download.redis.io/releases/


安装

        day05资料中提供了redis压缩包,拷贝至自己的安装目录解压即可。解压后目录如下:

启动方式

        不推荐直接使用双击启动。我使用视频中的指令在安装路径中创建.bat文件,将启动指令放在里面,直接双击该bat文件启动。启动指令redis-server.exe redis.windows.conf(安装路径下打开cmd)

启动成功!

客户端连接命令redis-cli.exe                

        通过redis-cli.exe命令默认连接的是本地redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:

-h ip地址

-p 端口号

-a 密码(如果需要,:redis.windows.conf - > requirepass 123456 重启后生效

图形化工具

        资料目录中还配备了图形化工具,直接双击安装即可。

二、操作命令

        字符串操作命令

        SET key value  设置指定key的值

        GET key  获取指定key的值

        SETEX key seconds value  设置指定key的值,并将 key 的过期时间设为 seconds

        SETNX key value  只有在 key 不存在时设置 key 的值

        哈希操作命令

        Redis hash 是一个string类型的 field value 映射表,hash特别适合用于存储对象 

    

   

        列表操作命令

                Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:

        集合操作命令       

                Redis set 是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:

        有序集合操作命令

                Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型score。常用命令:

通用命令

        Redis的通用命令是不分数据类型的,都可以使用的命令:

3三、java中使用redis

Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装。

在 Spring 项目中,可以使用Spring Data Redis来简化操作。

操作步骤

导入Spring Data Redis maven坐标
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置Redis数据源
application-dev.yml 中添加(前面设置过密码的记得配置密码)
sky:
  redis:
    host: localhost
    port: 6379
    database: 10

解释说明

database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。

可以通过修改Redis配置文件来指定数据库的数量。


application.yml中添加读取 application-dev.yml中的相关Redis配置
spring:
  profiles:
    active: dev
  redis:
    host: ${sky.redis.host}
    port: ${sky.redis.port}
    password: ${sky.redis.password}
    database: ${sky.redis.database}
编写配置类,创建RedisTemplate对象
@Configuration
@Slf4j
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;
    }
}

通过RedisTemplate对象操作Redis

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        //string数据操作
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //hash类型的数据操作
        HashOperations hashOperations = redisTemplate.opsForHash();
        //list类型的数据操作
        ListOperations listOperations = redisTemplate.opsForList();
        //set类型数据操作
        SetOperations setOperations = redisTemplate.opsForSet();
        //zset类型数据操作
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }
}

RedisTemplate

RedisTemplate 针对大量api进行了归类封装,将同一数据类型操作封装为对应的Operation接口,具体分类如下:

ValueOperations: s tring数据操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:hash类型的数据操作
ListOperations:list类型的数据操作

店铺营业状态设置

需求分析和设计

产品原型

一共设计三个接口:修改店铺状态,管理端、用户端查询店铺状态。

接口设计

- 设置营业状态
- 管理端查询营业状态
- 用户端查询营业状态

:从技术层面分析,其实管理端和用户端查询营业状态时,可通过一个接口去实现即可。因为营业状态是一致的。但是,本项目约定:

- 管理端发出的请求,统一使用/admin作为前缀。
- 用户端发出的请求,统一使用/user作为前缀。

因为访问路径不一致,故分为两个接口实现。(实现代码一致)

修改店铺状态

双端获取店铺状态

代码实现

由于使用redis存储,直接在controller层调用redisTemplate就能完成操作

//在sky-server模块中,创建ShopController.java
@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {

    public static final String KEY = "SHOP_STATUS";

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 设置店铺的营业状态
     * @param status
     * @return
     */
    @PutMapping("/{status}")
    @ApiOperation("设置店铺的营业状态")
    public Result setStatus(@PathVariable Integer status){
        log.info("设置店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        redisTemplate.opsForValue().set(KEY,status);
        return Result.success();
    }
}


	/**
     * 获取店铺的营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result<Integer> getStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        return Result.success(status);
    }

//创建com.sky.controller.user包,在该包下创建ShopController.java
@RestController("userShopController")
@RequestMapping("/user/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {

    public static final String KEY = "SHOP_STATUS";

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 获取店铺的营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result<Integer> getStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        return Result.success(status);
    }
}

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐