黑马苍穹外卖4 店铺营业状态设置+Redis基础

2024-06-20 15:36

本文主要是介绍黑马苍穹外卖4 店铺营业状态设置+Redis基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

店铺营业状态设置

在这里插入图片描述
Redis MySQL Java并发 JavaMVC 计算机网络 操作系统 算法,后端面试主要是这些,外加项目

Redis

数据库,基于内存存储的key-value结构。
mysql是磁盘存储,通过二维表存储。
在这里插入图片描述
在文件夹目录打开cmd
服务端:
开启

redis-server.exe redis.windows.conf

客户端:
普通启动连接

redis-cli.exe

显示的指定服务端和端口号

redis-cli.exe -h localhost -p 6379

默认客户端不需要密码就能连接上。
修改配置文件
redis.windows.conf 里 指定密码为123456
requirepass 123456

不需要用户名,客户端链接需要添加上密码

redis-cli.exe -h localhost -p 6379 -a 123456

常用数据类型

value的数据类型,key是字符串
在这里插入图片描述
在这里插入图片描述
常用命令:
1.字符串
在这里插入图片描述
不区分大小写

在图形化界面里按左边栏上的>_
set 
setex 

2.哈希
在这里插入图片描述

hset
hget
hdel 
hkeys
kvals

3.列表操作
在这里插入图片描述

lpush mylist a b c//从左侧插入即从头
lrange mylist 0 -1 //从头到尾
rpop mylist //删最后一个
llen mylist

4.集合操作
在这里插入图片描述

>sadd set1 a b c d//表内顺序和插入顺序无关
4
>smembers set1
>scard set1
4
>sadd set2 a b x y
>sinter set1 set2
b
a
>sunion set1 set3
c
a
b
x
y

5.有序集合操作
在这里插入图片描述
会按照分数排序

>zrange zset1 0 -1
a
b
c
>zrange zset1 0 -1 withscores
a
10
b
10.1
c
11.1
>zincrby zset1 5.0 a//给a的值+5.0

6.通用命令
在这里插入图片描述

>type mylist
list
>type set1
set
>del name set1 zset1
3
>

Redis 的Java 客户端

在这里插入图片描述
用java操作
。。。
(1)操作字符串类型数据

    @Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test01(){redisTemplate.opsForValue().set("name","小明"); // 设置k vString city = (String) redisTemplate.opsForValue().get("name"); // 拿到key为name的值System.out.println(city);redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES); // 设置过期时间为三分钟redisTemplate.opsForValue().setIfAbsent("lock","1"); // 设置lock为k的唯一值redisTemplate.opsForValue().setIfAbsent("lock","2");}
小明

(2)操作哈希类型数据

    @Testpublic void test02(){//hset hget hdel hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("100","name","tom"); // 设置k为100,哈希k为name v为100hashOperations.put("100","age","20");String name = (String) hashOperations.get("100", "name"); // 获取k为100,hashk为name的vSystem.out.println(name);Set keys = hashOperations.keys("100"); // 获取k为100的集合kSystem.out.println(keys);List values = hashOperations.values("100"); // 获取k为100的集合vSystem.out.println(values);hashOperations.delete("100","age"); // 删除age字段}
tom
[name,age]
[tom,20]

(3)操作列表类型数据

    @Testpublic void test03(){//lpush lrange rpop llenListOperations listOperations = redisTemplate.opsForList();listOperations.leftPushAll("mylist","a","b","c"); // 往k为mylist插入a,b,clistOperations.leftPush("mylist","d"); // 插入dList mylist = listOperations.range("mylist", 0, -1);System.out.println(mylist); // 输出listOperations.rightPop("mylist"); // 删除Long size = listOperations.size("mylist");System.out.println(size);System.out.println(listOperations.range("mylist", 0, -1));}
[d,c,b,a]
3
[d,c,b]

(4)操作集合类型数据

    @Testpublic void test4(){//sadd smembers scard sinter sunion sremSetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set1","a","b","c","d"); // 往set1 插入abcdsetOperations.add("set2","a","b","x","y"); // 往set2 插入abxySet members = setOperations.members("set1");System.out.println(members); // 输出Long size = setOperations.size("set1");System.out.println(size); // 输出Set intersect = setOperations.intersect("set1", "set2"); // 他们的交集System.out.println(intersect);Set union = setOperations.union("set1", "set2");// 他们的并集System.out.println(union);setOperations.remove("set1","a","b"); // 在set1里面删除ab}
[a,b,c,d]
4
[a,b]
[a,b,c,d,x,y]

(5)操作有序集合类型数据

    /*** 操作有序集合类型的数据*/@Testpublic void test05(){//zadd zrange zincrby zremZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset1","a",10); // 设置k为zset1v为a,分数为10zSetOperations.add("zset1","b",12); //同理zSetOperations.add("zset1","c",9); // 同理Set zset1 = zSetOperations.range("zset1", 0, -1);System.out.println(zset1); // 输出zSetOperations.incrementScore("zset1","c",10); // 为k为zset1v为c的加10分zSetOperations.remove("zset1","a","b"); // 删除ab}
[c,a,b]

(6)通用命令操作

    @Testpublic void test06(){//keys exists type delSet keys = redisTemplate.keys("*"); // 查找所有符合给定模式( pattern)的 key System.out.println(keys);Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");for (Object key : keys) {DataType type = redisTemplate.type(key); // 查找他们的类型是什么System.out.println(type.name());}redisTemplate.delete("mylist"); // 删除mylist}
[set2,zset1,set1]
SET
ZSET
SET

总结:
Spring Data Redis中提供了一个高度封装的类:RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

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

回归正题:店铺营业状态设置

在这里插入图片描述
用户端与管理端一样只是路径变为/user/shop/status

admin.ShopController.java

@RestController("adminShopController")//为了区分他俩
@RequestMapping("/admin/shop")
@Slf4j
@Api(tags = "店铺相关接口")
public class ShopController {public static final String KEY="SHOP_STATUS";@Autowiredprivate RedisTemplate redisTemplate;//注入redis对象@PutMapping("/{status}")@ApiOperation("设置店铺运营状态")public Result setStatus(@PathVariable Integer status){redisTemplate.opsForValue().set("SHOP_STATUS",status);//保存状态值return Result.success();}@GetMapping("/status")@ApiOperation("显示店铺运营状态")public Result<Integer> getStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(KEY);log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中":"打烊中");return Result.success();}}

为了避免两个Bean都叫shopController的冲突,所以用@RestController(“UserShopController”)//为了区分他俩
user.ShopController.java

@RestController("UserShopController")//为了区分他俩
@RequestMapping("/user/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {public static final String KEY = "SHOP_STATUS";@Autowiredprivate RedisTemplate redisTemplate;@GetMapping("/status")@ApiOperation("显示店铺运营状态")public Result<Integer> getStatus() {log.info("店铺查询状态");return Result.success((Integer) redisTemplate.opsForValue().get(KEY));}}

另外:为了将接口文档的用户和admin的接口区分开
修改配置类,分别扫描两个包,分组展示,形成两份接口文档

@Beanpublic Docket docketOne() {ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName("管理端接口")//分组.apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin")).paths(PathSelectors.any()).build();return docket;}@Beanpublic Docket docketTwo() {ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName("用户端接口")//分组.apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller.user")).paths(PathSelectors.any()).build();return docket;}

这篇关于黑马苍穹外卖4 店铺营业状态设置+Redis基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078536

相关文章

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

为什么要做Redis分区和分片

Redis分区(Partitioning)和分片(Sharding)是将数据分布在多个Redis实例或多个节点上的做法。这种技术用于提高性能、可扩展性和可用性。以下是执行Redis分区和分片的主要原因: 1. **提高吞吐量**:    - 通过将数据分散到多个节点,可以并行处理更多的操作,从而提高整体吞吐量。 2. **内存限制**:    - 单个Redis实例的内存是有限的。分区允许数据

[FPGA][基础模块]跨时钟域传播脉冲信号

clk_a 周期为10ns clk_b 周期为34ns 代码: module pulse(input clk_a,input clk_b,input signal_a,output reg signal_b);reg [4:0] signal_a_widen_maker = 0;reg signal_a_widen;always @(posedge clk_a)if(signal_a)

00 - React 基础

1. React 基础 安装react指令 可参考: 官网官网使用教程 如: npx create-react-app 项目名如:npx create-react-app react-redux-pro JSX JSX 是一种 JavaScript 的语法扩展,类似于 XML 或 HTML,允许我们在 JavaScript 代码中编写 HTML。 const element =