黑马苍穹外卖学习Day5

文章目录

  • Redis学习
    • Redis简介
    • 准备工作
    • Redis常用数据类型介绍
    • 各数据类型的特点
    • Redis常用命令
      • 字符串操作命令
      • 哈希操作命令
      • 列表操作命令
      • 集合操作命令
      • 有序集合操作命令
      • 通用操作命令
    • 在Java中操作Redis
      • 导入Spring Data Redis坐标
      • 配置Redis数据源
      • 编写配置类,创建RedisTemplate对象
      • 通过RedisTemplate对象操作Redis
  • 店铺营业状态设置
    • 产品需求分析
    • 设置营业状态
    • 代码实现

Redis学习

Redis简介

Redis是一个基于内存的key-value 结构数据库。

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品、资讯、新闻)
  • 企业应用广泛

准备工作

启动redis并与本地服务器连接
双击redis-server.exe文件,之后可以双击redis-cli.exe或redis-cli.exe -h localhost -p 6379与本地服务器连接

下载Another Redis作为图形化工具使用

Redis常用数据类型介绍

在这里插入图片描述

各数据类型的特点

在这里插入图片描述

Redis常用命令

字符串操作命令

在这里插入图片描述
在redis中设置一个指定的key值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置一个key值以及过期时间
在这里插入图片描述
到时会自动删除key
在这里插入图片描述
只有在key不存在时才可以赋值
在这里插入图片描述
在这里插入图片描述

哈希操作命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

列表操作命令

LPUSH可形象类比为头插法
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除队尾的值
在这里插入图片描述
在这里插入图片描述

集合操作命令

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

有序集合操作命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通用操作命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在Java中操作Redis

在这里插入图片描述

导入Spring Data Redis坐标

POM文件中导入

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

配置Redis数据源

application.yml中配置,在spring下面添加。dev中填写真正的数据类

  redis:host: ${sky.redis.host}port: ${sky.redis.port}database: ${sky.redis.database}

编写配置类,创建RedisTemplate对象

在config类中新建对象

package com.sky.config;
@Configuration
@Slf4jpublic class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){RedisTemplate redisTemplate = new RedisTemplate();//设置Redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置Redis中key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

在上述的 Redis 配置代码中,redisTemplate.setKeySerializer(new StringRedisSerializer()); 设置了 Redis 中 key 的序列化器为 StringRedisSerializer。这是因为 Redis 的 key 通常是字符串,为了方便人类阅读和理解,使用字符串的序列化器将 key 转换为字符串形式存储在 Redis 中。

使用适当的序列化器对于在分布式系统中传输和存储对象是非常重要的。它确保了对象能够以可靠的方式被转换为字节流,并且在反序列化时能够正确还原。选择合适的序列化器也可以影响性能,因为不同的序列化方式有不同的效率和序列化大小。

通过RedisTemplate对象操作Redis

新建测试类进行测试

package com.sky.test;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRdisTemplate(){System.out.println(redisTemplate);//操作字符串ValueOperations valueOperations = redisTemplate.opsForValue();//操作哈希HashOperations hashOperations = redisTemplate.opsForHash();ListOperations listOperations = redisTemplate.opsForList();SetOperations setOperations = redisTemplate.opsForSet();ZSetOperations zSetOperations = redisTemplate.opsForZSet();}/*** 操作字符串数据*/@Testpublic void testString(){//set get setex setnxredisTemplate.opsForValue().set("city", "boy");String city = (String)redisTemplate.opsForValue().get("city");System.out.println(city);redisTemplate.opsForValue().set("code", "123456", 3, TimeUnit.MINUTES);redisTemplate.opsForValue().setIfAbsent("lock", "1");redisTemplate.opsForValue().setIfAbsent("lock", "2");}/*** 操作哈希的数据*/@Testpublic void testHash(){//Hset hget hdel hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("100", "name", "jimmy");hashOperations.put("100", "age", "20");String name = (String) hashOperations.get("100", "name");System.out.println(name);Set keys = hashOperations.keys(100);System.out.println(keys);List values = hashOperations.values("100");System.out.println(values);hashOperations.delete("100", "age");}/*** 操作列表数据*/@Testpublic void testList(){//lpush lrange rpop llenListOperations listOperations = redisTemplate.opsForList();listOperations.leftPushAll("mylist", "a","b","c");listOperations.leftPush("mylist", "d");List mylist = listOperations.range("mylist", 0, -1);System.out.println(mylist);listOperations.rightPop("mylist");Long size = listOperations.size("mylist");System.out.println(size);}/*** 集合类型操作*/public void testSet(){//sadd smembers scard sinter sremSetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set1", "a","b","c","d");setOperations.add("set2", "a","b","x","y");Set 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");}
}

店铺营业状态设置

产品需求分析

在这里插入图片描述
在这里插入图片描述

设置营业状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

首先了解一下
@PutMapping、@PostMapping、@GetMapping 分别对应不同的 CRUD

@PutMapping: 对应于更新操作(Update)。通常用于修改已存在的资源。在 RESTful 风格的 API 中,对应于 HTTP PUT 请求。
@PostMapping: 对应于创建操作(Create)。通常用于新建资源。在 RESTful 风格的 API 中,对应于 HTTP POST 请求。
@GetMapping: 对应于读取操作(Read)。通常用于获取已存在的资源。在 RESTful 风格的 API 中,对应于 HTTP GET 请求。

新建两个Controller,通过@RestController后加的值做区分。

package com.sky.controller.admin;import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {@Autowiredprivate RedisTemplate redisTemplate;public static final String KEY = "SHOP_STATUS";/*** 设置店铺营业状态* @param status* @return*/@PutMapping("/{status}")@ApiOperation("设置店铺营业状态")public Result setStatus(@PathVariable Integer status){redisTemplate.opsForValue().set(KEY, status);return Result.success();}/*** 获取店铺营业状态* @return*/@GetMapping("/{status}")@ApiOperation("获取店铺营业状态")public Result<Integer> getStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(KEY);return Result.success(status);}
}
package com.sky.controller.user;import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController("userShopController")
@RequestMapping("/user/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {@Autowiredprivate RedisTemplate redisTemplate;public static final String KEY = "SHOP_STATUS";/*** 获取店铺营业状态* @return*/@GetMapping("/{status}")@ApiOperation("获取店铺营业状态")public Result<Integer> getStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(KEY);return Result.success(status);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/617970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scipy 中级教程——图像处理

Python Scipy 中级教程&#xff1a;图像处理 Scipy 的图像处理模块提供了许多功能&#xff0c;用于读取、处理和分析图像。在本篇博客中&#xff0c;我们将深入介绍 Scipy 中的图像处理功能&#xff0c;并通过实例演示如何应用这些工具。 1. 读取和显示图像 首先&#xff0c…

linux多进程基础(2):僵尸进程以及解决方法wait()函数(大白话解释)

在我的linux多线程多进程基础专栏中,已和大家一起分享了僵尸线程.在这一篇文章中我将分享僵尸进程以及解决方法wait()函数. 1.僵尸进程 什么是僵尸进程呢?用最通俗易懂的话来说就是子进程执行结束的时候其父进程并没有及时回收该子进程导致成为僵尸进程.如果僵尸进程数量较多…

【模型评估 06】超参数调优

对于很多算法工程师来说&#xff0c;超参数调优是一件非常头疼的事情。除了根据经验设定所谓的“合理值”之外&#xff0c;一般很难找到合理的方法去寻找超参数的最优取值。而与此同时&#xff0c;超参数对于模型效果的影响又至关重要。有没有一些可行的办法去进行超参数的调优…

10分钟快速搭建个人博客、文档网站!

本文来分享 8 个现代化前端工具&#xff0c;帮你快速生成个人博客、文档网站&#xff01; VitePress VitePress 是一款静态站点生成器&#xff0c;专为构建快速、以内容为中心的网站而设计。简而言之&#xff0c;VitePress 获取用 Markdown 编写的源内容&#xff0c;为其应用…

前端面试 -- vue系列

Vue系列 1. vue理解&#xff1a;2. SPA&#xff08;单页面应用理解&#xff09;3. vue实例挂载的过程4. v-for和v-if优先级5. SPA首屏加载速度慢的原因和解决办法6. Vue中给对象添加新属性界面不刷新&#xff08;直接给对象添加属性&#xff09;7. vue组件之间的通信方式有哪些…

python24.1.13for循环

对列表、字典、字符串等进行迭代 range

Legion R7000 2021(82JW)原装出厂Win10/WIN11系统预装OEM系统镜像

LENOVO联想拯救者R7000 2021款(82JW)笔记本电脑原厂Windows10/11系统 链接&#xff1a;https://pan.baidu.com/s/1m_Ql5qu6tnw62PbpvXB0hQ?pwd6ek4 提取码&#xff1a;6ek4 原装出厂系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、系统属性专属联想的LOGO标…

Linux期末总复习( 详解 )

文章目录 一、选择题二、填空题三、简答题四、操作题 一、选择题 1.在创建Linux分区时&#xff0c;一定要创建&#xff08; D &#xff09;两个分区 A. FAT/NTFS  B. FAT/SWAP  C. NTFS/SWAP  D.SWAP/根分区 2.在Red Hat Linux 9 中&#xff0c;系统默认的&#xf…

88.乐理基础-记号篇-反复记号(二)D.C.、D.S.、Fine、Coda

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;87.乐理基础-记号篇-反复记号&#xff08;一&#xff09;反复、跳房子-CSDN博客 下图红色左括号框起来的东西&#xff0c;它们都相对比较抽象一点&#xff0c;这几个词都是意大利语 首先D.C.这个标记&#xff0c;然…

7 - MySQL主从同步|主从同步模式

MySQL主从同步&#xff5c;主从同步模式 MySQL主从同步主从同步介绍主从同步工作过程主从同步结构模式配置主从同步一主一从同步结构一主多从同步结构主从从同步结构主主同步结构 主从同步模式主从同步结构模式复制模式 MySQL主从同步 主从同步介绍 存储数据的服务结构 主服务…

高效便捷的远程管理利器——Royal TSX for Mac软件介绍

Royal TSX for Mac是一款功能强大、操作便捷的远程管理软件。无论是远程桌面、SSH、VNC、Telnet还是FTP&#xff0c;用户都可以通过Royal TSX轻松地远程连接和管理各种服务器、计算机和网络设备。 Royal TSX for Mac提供了直观的界面和丰富的功能&#xff0c;让用户能够快速便…

事关年终奖,速看!年终奖应该如何设定结构,提高激励性?

随着2024年的临近&#xff0c;员工们对于年终奖的发放满怀期待&#xff0c;而企业管理者则又到了大费周章的时候。年终奖的发放方式、内容以及金额&#xff0c;成为困扰每个管理者的难题。为什么年终奖发放后&#xff0c;大家的积极性没有得到提高&#xff1f;该激励的没激励到…

聊聊PowerJob的TimingStrategyHandler

序 本文主要研究一下PowerJob的TimingStrategyHandler TimingStrategyHandler tech/powerjob/server/core/scheduler/auxiliary/TimingStrategyHandler.java public interface TimingStrategyHandler {/*** 校验表达式** param timeExpression 时间表达式*/void validate(S…

ITSS申报条件以及评审方式

01、四级申报基本条件&#xff1a; &#xff08;1&#xff09;具有独立法人地位&#xff1b; &#xff08;2&#xff09;已按照《运维服务能力成熟度》四级特征和关键指标建立了运维服务能力体系&#xff0c;且已有效运行三个月以上&#xff1b; &#xff08;3&#xff09;能…

Spring Boot - Application Events 的发布顺序_ApplicationReadyEvent

文章目录 Pre概述Code源码分析 Pre Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent 概述 Spring Boot 的广播机制是基于观察者模式实现的&#xff0c;它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦&#…

Hades-C2:一款功能强大的纯Python命令控制服务器

关于Hades-C2 Hades-C2是一款功能强大的命令控制服务器&#xff0c;该工具基于纯Python开发&#xff0c;可以帮助广大研究人员快速实现命令控制基础设施的搭建。 当前版本的Hades-C2可以用作安全分析研究或CTF比赛&#xff0c;但功能并不完善&#xff0c;目前该项目仍在积极开…

Java之Stream类

1.介绍 &#xff08;1&#xff09;Stream流 配合Lambda表达式&#xff0c;简化集合和数组的操作 &#xff08;2&#xff09;Stream流思想 流水线思想 2.获取Stream流对象 &#xff08;1&#xff09;集合获取流Stream流对象 使用Collection接口中的默认方法Stream<T> s…

Python学习之路-综合练习:学生管理系统

Python学习之路-综合练习:学生管理系统 目前已经学习了变量、流程控制、函数、模块&#xff0c;可以利用已学习的知识开发一个学生管理系统 项目需求 系统有首页介绍页面与功能菜单系统功能由查询、显示、修改与删除功能可以使用数字选择不同的功能学生信息需要记录&#xf…

Trans论文复现:基于数据驱动的新能源充电站两阶段规划方法程序代码!

适用平台&#xff1a;MatlabYalmipCplex/Gurobi&#xff1b; 文章提出了一种电动汽车充电站的两阶段规划方法&#xff0c;第一阶段通过蒙特卡洛法模拟充电车辆需求和电池充放电数据来确定充电站位置&#xff1b;第二阶段通过数据驱动的分布鲁棒优化方法优化充电站的新能源和电池…

【惠友骨科小课堂】拇外翻常见的几个误区,来看看你中了几个?

拇外翻作为常见的足部畸形&#xff0c;在日常生活中困扰着许多人。歪脚趾不仅外观不好看&#xff0c;还会出现疼痛、影响行走运动。但大多数人对于拇外翻的认识都不足常常落入认知误区&#xff0c;快来看看你中了几个&#xff1f; 误区一Q 我都没穿过高跟鞋&#xff0c;怎么也…