【苍穹外卖】Day 5 Redis、店铺营业状态接口

1 基本介绍

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

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

运行

在cmd下

redis-server.exe redis.windows.conf

启动状态下,再

redis-cli.exe

测试:

也可以

redis-cli.exe -h localhost -p 6379

在配置文件设置密码

(4位密码不行)

改为6位

然后

发现已经需要密码

需要

简化:安装管理客户端(但是需要先启动redis)

2 常用命令

2.1 数据类型

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

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set/zset


2.1 字符串 操作命令

  • SET key value     设置指定 key 的值
  • GET key     获取指定 key 的值
  • SETEX key seconds value     设置指定 key 的值,并将 key 的过期时间设为 seconds 比                                                  如存储验证码(存在 5 min)
  • SETNX key value     只有在 key 不存在时设置 key 的值

NX:No eXist

2.2 哈希 操作命令

Redis hash 是一个 string 类型的 field 和 value 的映射表

用来存储 对象

  • HSET key field value      将哈希表 key 中的字段 field 的值设为 value
  • HGET key field     获取存储在哈希表中指定字段的值
  • HDEL key field     删除存储在哈希表中的指定字段
  • HKEYS key     获取哈希表中所有字段
  • HVALS key     获取哈希表中所有值

存储员工对象

2.3 列表 操作命令

Redis 列表是简单的字符串列表,按照插入顺序排序

  • LPUSH key value1 [value2]     将一个或多个值插入到列表 头部
  • LRANGE key start stop     获取列表指定范围内的元素
  • RPOP key     移除并获取列表最后一个元素
  • LLEN key     获取列表长度

2.4 集合 操作命令

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

  • SADD key member1 [member2]     向集合添加一个或多个成员
  • SMEMBERS key     返回集合中的所有成员
  • SCARD key     获取集合的成员数

Cardinality 基数

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

Intersection 交接(点或线),相交;交汇点(尤指道路);(动作)交接,交叉

  • SUNION key1 [key2]     返回给定所有集合的 并集
  • SREM key member1 [member2]     删除集合中一个或多个成员

2.5 有序集合 操作命令

        Redis 有序集合是 string 类型元素的集合,且不允许有重复成员。每个元素都会关联一个 double 类型的 分数

  • ZADD key score1 member1 [score2 member2]     向有序集合添加一个或多个成员
  • ZRANGE key start stop [WITHSCORES]     通过索引区间返回有序集合中指定区间内的成员
  • ZINCRBY key increment member     有序集合中对指定成员的分数加上增量 increment

increment 增量

  • ZREM key member [member...]     移除有序集合中的一个或多个成员

2.6 通用命令

  • KEYS pattern     查找所有符合给定模式(pattern)的 key

模式字符串可以包含以下特殊字符:

  • *:匹配任意数量的任意字符
  • ?:匹配任意单个字符
  • [...]:匹配方括号内的任意单个字符(范围)

例如,要查找所有以 "user:" 开头的键,可以使用以下命令:

KEYS user:*
  • EXISTS key     检查给定 key 是否存在
  • TYPE key     返回 key 所储存的值的类型
  • DEL key     该命令用于在 key 存在时删除 key

3 在 Java 中操作 Redis

Redis 的 Java 客户端很多,常用的几种:

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring Data Redis 使用方式

第一步 引入 Maven 依赖

pom.xml

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

第二步 配置 Redis 数据源

application.yml

当前在 0 号数据库(DB)

默认是 0,可以不配置

spring:
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0

第三步 编写配置类,创建 RedisTemplate 对象

Template 模板

        序列化器(Serializer)是一个将对象转换为某种特定格式的过程,以便能够将对象存储或传输的工具。相应的,反序列化器(Deserializer)则是将这种特定格式的数据重新转换为对象的过程。序列化器和反序列化器在分布式系统、网络通信、持久化存储等领域非常常见,特别是在像 Redis 这样的内存数据库中

RedisConnectionFactory 是用于创建 Redis 连接的工厂,它抽象了连接 Redis 服务器的细节

第四步 通过 RedisTemplate 对象操作 Redis

3.1 测试

3.2 字符串数据

3.3 哈希数据

在配置类设置一下序列化器

3.4 列表数据

3.5 集合数据

3.6 有序集合数据

3.7 通用命令

4 店铺营业状态设置

4.1 设计

设置营业状态 接口

管理端查询营业状态 接口

用户端查询营业状态 接口

Path:/user/shop/status

Method:GET

对于“营业状态”这个值,使用 redis 进行存储

KEY VALUE
SHOP_STATUS 1 

4.2 实现

直接使用 redis

用户端

为了防止Bean冲突,在注解 @RestController 后面加上别名

(在 客户端 和 用户端 都要加)

4.3 测试

 这里,在配置类下,不要对value进行string的序列化,否则会报错

package com.sky.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        log.info("开始创建redis模板类");
//        RedisTemplate redisTemplate = new RedisTemplate();
//        redisTemplate.setConnectionFactory(redisConnectionFactory);
//
        redisTemplate.setKeySerializer(new StringRedisSerializer());
//
//        return redisTemplate;


        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 设置Key的序列化器为String
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        // 设置Value的序列化器为String
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
//        // 设置Hash Key的序列化器为String
//        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//
//        // 设置Hash Value的序列化器为String
//        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

5 修改一下 knife4j 接口文档

改为:

 注意包名

/**
     * 通过 knife4j 生成接口文档
     *
     * @return
     */
    @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;
    }
    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;
    }

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值