苍穹外卖-Redis部分

P49 课程介绍

Redis入门

P50 redis

一个基于内存的key-value结构数据库。(mysql基于磁盘存储,二维表存储)redis是键值对形式。

基于内存存储,读写性能高。一般适合存储热点数据,热点商品、资讯、新闻等。

我的安装在D盘,版本为Redis_x64_5.0.14.1。

启动redis的操作:

  • 进入redis的安装目录,

  • redis-server.exe redis.windows.conf,默认端口号6379

在这里插入图片描述

  • 连接redis服务,redis-cli.exe,默认连接本地的redis。连接其他的redis

    • redis-cli.exe -h ip地址 -p 端口号 -a 有密码就输入密码
  • redis配置文件中默认没有配置密码,修改配置文件redis.window.conf

    • 在文件中找到requirepass foobared,设置密码配置,取消注释,foobared就是自己需要修改的密码,保存重启redis就可以了

可以使用redis的图形界面,例如Another-Redis-Desktop-Manager

P51 Redis常用数据类型

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

  • 字符串string

  • 哈希hash,类似java中的hashmap结构,适合存储对象

  • 列表list,带有顺序,按照插入顺序排序,可以有重复元素,类似java的LinkedList,适合存储有顺序有关的

  • 集合set,无序的,没有重复元素,类似java中的hashset

  • 有序集合sorted set/ zset,集合中每个元素会关联一个分数,根据分数升序排序,没有重复元素

P52 redis常用命令-Redis字符串类型常用命令

不同数据类型有独特的命令,也有通用命令

Redis字符串类型常用命令:

  • SET key value设置键值

  • GET key获取指定key的值

  • SETEX key seconds value,seconds为秒数,应用场景短信验证码

  • SETNX key value,只有在key不存在时设置key的值,存在则不进行设置。典型应用场景分布式锁

P53 redis常用命令-哈希操作命令

在这里插入图片描述

  • HSET key field value

  • HGET key field

  • HDEL key field,删除

  • HKEYS key

  • HVALS key

P54 redis常用命令-列表操作命令

在这里插入图片描述

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

  • LPUSH key value1 [value2],插入数据,从左侧插入,右侧移除

  • LRANGE key start stop

  • RPOP key移除并获取列表最后一个元素

  • LLEN key

P55 redis常用命令-集合操作命令

无序,无重复,

  • SADD key member1[member2]

  • SMEMBERS key,返回集合中所有成员

  • SCARD key获取集合中的成员数

  • SINTER key1 [key2]返回给定集合的交集

  • SUNION key1 [key2]返回并集

  • SREM key member1 [member2]

P56 redis常用命令-有序集合操作命令

有序,不重复,每个元素会关联一个double类型的分数

  • ZADD key score1 member1 [score2 member2]

  • ZRANGE key start stop [WITHSCORES]

  • ZINCRBY key increment member对分数加上增量

  • ZREM key member [member]移除

P57 redis通用命令

不分数据类型

  • KEYS patter

  • EXISTS key检查key是否存在

  • TYPE key

  • DEL key

在java中操作Redis

P58 Redis的java客户端

常见的:

  • Jedis

  • Lettuce

  • Spring data Redis,spring的一部分,对redis底层开发包进行了高度封装,建议使用

spring data redis使用方式:

  • 导入坐标

在sky server模块的pom中引入坐标,

<!--        使用spring data redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  • 配置redis数据源

在sky server模块下配置文件中配置,

spring:
 redis:
    host: localhost
    port: 6379
    # 如果有密码可以加上密码
    # database: 默认创建了16个库,DB0-15,默认就是DB0

可以修改,在yml.dev中使用,然后在yml中引用,

在这里插入图片描述

在这里插入图片描述

  • 编写配置类,RedisTemplate,redis模板对象
@Configuration
@Slf4j
public class RedisConfiguration {
    // 引入了spring data redis,会自动将连接工厂放到spring容器中,只需要在下面的方法中声明
    @Bean  // 注入redis连接工厂
    public RedisTemplate redisTemplate(RedisConnectionFactory redistConnectionFactory) {
        // 日志
        log.info("开始创建redis模板对象");
        RedisTemplate redisTemplate = new RedisTemplate();
        // 设置redis连接工厂对象
        redisTemplate.setConnectionFactory(redistConnectionFactory);
        // 设置redis key的序列化器(指定string类型的序列化器,便于图形界面展示)
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 返回对象
        return redisTemplate;
    }
}

  • 通过RedisTemplate对象操作redis

创建对象,示例:

 // 操作字符串数据类型
        ValueOperations valueOperations = redisTemplate.opsForValue();
        // 操作hash类型
        HashOperations hashOperations = redisTemplate.opsForHash();
        // 操作列表
        ListOperations listOperations = redisTemplate.opsForList();
        // 操作集合
        SetOperations setOperations = redisTemplate.opsForSet();
        // 操作有序集合
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

P60 在java中操作Redis-操作字符串类型的数据

示例:

redisTemplate.opsForValue().set("city", "北京");
String city = (String) redisTemplate.opsForValue().get("city");
System.out.println(city);
// setex 对应java操作还是 set,
redisTemplate.opsForValue().set("city", "湖南", 3, TimeUnit.MINUTES); // 表示期限为3分钟
// 设置setnx 对应 
// setnx
redisTemplate.opsForValue().setIfAbsent("locked", "1");

java中设置时间期限为:

在这里插入图片描述

P61 在java中操作Redis-操作哈希类型的数据

P62 其他类型数据的操作

店铺营业状态设置

P63 需求分析

有查询状态的接口,然后修改状态的接口

在这里插入图片描述

营业状态数据存储方式,建议使用基于redis的字符串进行存储。

P64 代码开发

示例:设置和查询操作

    @PutMapping("/{status}")
    @ApiOperation("管理端设置店铺营业状态")
    public Result setStatus(@PathVariable Integer status){
        log.info("设置店铺营业状态为:{}", status ==1 ? "1营业中" : "0打烊中");
        // 创建redis的string类型
        redisTemplate.opsForValue().set("SHOP_STATUS", status);
        return  Result.success();
    }

    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result getStatus(){
        Integer shop_staatus = (Integer) redisTemplate.opsForValue().get("SHOP_STAATUS");
        return Result.success(shop_staatus);

    }

注意用户端和客户端如果都有查询店铺营业状态的,但是controller都是shopcontroller则会报错,两者冲突,可以在注解@Restcontroller中进行设置,例如:

@RestController("adminShopController")

P65 功能测试

先登录账户,使用管理端设置redis数据库中店铺状态,注意本地运行要启动本地的redis数据库。

如果希望接口文档按照管理端和用户端进行显示,则需要在接口文档的配置中重新编写,例如下述代码,分别扫描用户端和客户端的包,然后设置分组group。

重新启动则可以按照不同类别进行显示了。
在这里插入图片描述

@Bean
    public Docket docket1() {
        // 配置接口文档信息
        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;
    }

    @Bean
    public Docket docket2() {
        // 配置接口文档信息
        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;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算方法实验2:列主元消元法和Gauss-Seidel迭代法解线性方程组

Task 即已知 y 0 0 , y 100 1 y_00,y_{100}1 y0​0,y100​1&#xff0c;解线性方程组 A y b \mathbf{A}\mathbf{y} \mathbf{b} Ayb&#xff0c;其中 A 99 99 [ − ( 2 ϵ h ) ϵ h 0 ⋯ 0 ϵ − ( 2 ϵ h ) ϵ h ⋯ 0 0 ϵ − ( 2 ϵ h ) ⋯ 0 ⋮ ⋮ ⋱ ⋱ ⋮ 0 0 ⋯…

短视频矩阵系统源头技术开发--每一次技术迭代

短视频矩阵系统源头开发3年的我们&#xff0c;肯定是需求不断的迭代更新的&#xff0c;目前我们已经迭代了3年之久&#xff0c;写技术文章已经写了短视频矩阵系统&#xff0c;写了3年了&#xff0c;开发了3年了 短视频矩阵获客系统是一种基于短视频平台的获客游戏。短视频矩阵系…

基因在各个细胞系表达情况

从CCLE下载数据得到基因在每个细胞系中的 现在从DepMap: The Cancer Dependency Map Project at Broad Institute 需要先选择Custom Downloads 就可以下载数据进行处理了&#xff1a; rm(list ls()) library(tidyverse) library(ggpubr) rt <- data.table::fread("…

基于SpringBoot校园外卖服务系统设计与实现

点赞收藏关注 → 私信领取本源代码、数据库一、项目概述 项目名称&#xff1a;基于SpringBoot校园外卖服务系统设计与实现 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 主要技术&#xff1a;SpringBootMybatisMySQL 运行环境&#xff1a;Windows7以上、JDK…

QT----给程序添加上任务栏托盘图标和退出

让我们的程序拥有任务栏托盘图标&#xff0c;实现程序后台运行&#xff0c;退出等功能 1、关闭程序保持后台 重写关闭事件,忽略点击窗口关闭 void MainWindow::closeEvent(QCloseEvent *event) {// 隐藏窗口&#xff0c;而不是真正关闭setVisible(false);// 忽略关闭事件&am…

【蓝牙协议栈】【BLE】低功耗蓝牙配对绑定过程分析(超详细)

1. 精讲蓝牙协议栈&#xff08;Bluetooth Stack&#xff09;&#xff1a;SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅&#xff0c;【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待&#xff01…

Java双指针算法

参考&#xff1a; 【Java版本】常用代码模板1——基础算法 模板题参考实现 - AcWing 【Java版本】常用代码模板2——数据结构 模板题参考实现 - AcWing 题目一&#xff1a; 输入&#xff1a;abc def ghi 输出&#xff1a;abc def ghi 题解&#xff1a; public class …

☆【前后缀】【双指针】Leetcode 42. 接雨水

【前后缀】【双指针】Leetcode 42. 接雨水 解法1 前后缀分解解法2 双指针 ---------------&#x1f388;&#x1f388;42. 接雨水 题目链接&#x1f388;&#x1f388;------------------- 解法1 前后缀分解 维护一个前缀&#xff08;左侧最高&#xff09;后缀&#xff08;右侧…

基于python+vue高校门诊管理系统flask-django-php-nodejs

课题主要采用python开发语言、django框架和MySQL数据库开发技术以及基于Eclipse的编辑器。系统主要包括用户、用户充值、医生、挂号信息、检查开药、药品信息、药品入库、取药出库等功能&#xff0c;从而实现智能化的管理方式&#xff0c;提高工作效率。 语言&#xff1a;Pytho…

全流程基于GIS、python机器学习技术的地质灾害风险评价与信息化建库教程

原文链接&#xff1a;全流程基于GIS、python机器学习技术的地质灾害风险评价与信息化建库https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598798&idx6&sn29597597dc134060576998b3302467f8&chksmfa820329cdf58a3fa73c04ac20a28fab7c7ee8fb15d0f8ac50…

python处理Excel的方法之xlrd

python处理Excel常用到的模块是xlrd。使用xlrd可以非常方便的处理Excel文档&#xff0c;下面介绍一下基本用法 打开文件 import xlrd data xlrd.open_workbook("c:\\skills.xls") 获取一个工作表 table data.sheet_by_name(uskills) #也可以 table data.sheet_by_…

测试CAN功能是否使能成功

一. 简介 上一篇文章学习了在 kernel内核源码如何使能 Linux 内核自带的 FlexCAN 驱动。通过配置kernel来实现。文章如下&#xff1a; 本文验证&#xff0c;开发板加载新生成的 zImage内核镜像文件&#xff0c;确定 CAN驱动是否已经成功使能。 二. 测试CAN驱动是否使能成功…

Go --- 编程知识点及其注意事项

new与make 二者都是用于内存分配&#xff0c;当声明的变量是引用类型时&#xff0c;不能给该变量赋值&#xff0c;因为没有分配空间。 我们可以用new和make对其进行内存分配。 首先说说new new函数定义 func new(Type) *Type传入一个类型&#xff0c;返回一个指向分配好该…

Nacos部署(一)Linux部署Nacos2.3.x单机环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Nacos部署&#xff08;一&#xff09;Linux部署Nacos2.3.x单机环境 ⏱️…

鸿蒙开发学习【地图位置服务组件】

简介 移动终端设备已经深入人们日常生活的方方面面&#xff0c;如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动&#xff0c;都离不开定位用户终端设备的位置。 当用户处于这些丰富的使用场景中时&#xff0c;系统的位置定位能力可以提供…

深度解析:Elasticsearch写入请求处理流程

版本 Elasticsearch 8.x 原文链接&#xff1a;https://mp.weixin.qq.com/s/hZ_ZOLFUoRuWyqp47hqCgQ 今天来看下 Elasticsearch 中的写入流程。 不想看过程可以直接跳转文章末尾查看总结部分。最后附上个人理解的一个图。 从我们发出写入请求&#xff0c;到 Elasticsearch 接收请…

应急响应实战笔记03权限维持篇(7)

第7篇&#xff1a;常见WebShell管理工具 攻击者在入侵网站时&#xff0c;通常要通过各种方式写入Webshell&#xff0c;从而获得服务器的控制权限&#xff0c;比如执行系统命令、读取配置文件、窃取用户数据&#xff0c;篡改网站页面等操作。 本文介绍十款常用的Webshell管理工…

图论基础|深度优先dfs、广度优先bfs

dfs 与 bfs 区别 提到深度优先搜索&#xff08;dfs&#xff09;&#xff0c;就不得不说和广度优先搜索&#xff08;bfs&#xff09;有什么区别 先来了解dfs的过程&#xff0c;很多录友可能对dfs&#xff08;深度优先搜索&#xff09;&#xff0c;bfs&#xff08;广度优先搜索…

K8S之DaemonSet控制器

DaemonSet控制器 概念、原理解读、应用场景概述工作原理典型的应用场景介绍DaemonSet 与 Deployment 的区别 解读资源清单文件实践案例 概念、原理解读、应用场景 概述 DaemonSet控制器能够确保K8S集群所有的节点都分别运行一个相同的pod副本&#xff1b; 当集群中增加node节…

【嵌入式】Docker镜像构建指南:引领应用部署的革新之路

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟。提供嵌入式方向的学习指导、简历面…