学生党学习笔记——黑马程序员Java项目实战《苍穹外卖》——Day05 redis&店铺状态
前言
今天学习的内容个人感觉比较少,主要是以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种常用的数据类型:
有序集合 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来简化操作。
操作步骤
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
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}
@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接口,具体分类如下:
店铺营业状态设置
需求分析和设计
产品原型:
一共设计三个接口:修改店铺状态,管理端、用户端查询店铺状态。

接口设计:
- 设置营业状态
- 管理端查询营业状态
- 用户端查询营业状态
注:从技术层面分析,其实管理端和用户端查询营业状态时,可通过一个接口去实现即可。因为营业状态是一致的。但是,本项目约定:
- 管理端发出的请求,统一使用/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);
}
}
更多推荐



所有评论(0)