毕设项目<<基于微信小程序的餐馆外卖系统>>(四)

毕设项目<<基于微信小程序的餐馆外卖系统的设计后端>>(开发记录(四)店铺状态设置/Redis学习)


视频传送带

店铺状态设置

1.Redis介绍

1.1 简介

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

优点
  • 基于内存存储读写性能高
  • 适合存储热点数据
  • 企业应用广泛
1.2 下载安装

Redis安装包分为 Windows 版和 Linux 版:
Windows版下载地址:https://github.com/microsoftarchive/redis/releases
Linux版下载地址: https://download.redis.io/releases/
请添加图片描述

  1. 启动命令:redis-server.exe redis.windows.conf
    请添加图片描述

  2. 结束命令:按下 CTRL+C。Redis服务默认端口号为 6379
    请添加图片描述

  3. 客户端连接

    • 新打开命令行窗口输入 redis-cli.exe

    • 显式链接:redis-cli.exe -h localhost -p 6379 (指定连接服务名称和端口号)

    • 测试连接;输入 keys *
      请添加图片描述

      通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:
      -h ip地址
      -p 端口号
      -a 密码(如果需要)

  4. 退出命令 exit

  5. 通过修改配置文件设定密码 取消注释requirepass foobared 并设置密码

    • 密码连接 redis-cli.exe -h localhost -p 6379 -a SGLPy1314
  6. redis 图形控制界面

1.3 Redis数据类型
5种常用数据类型

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

  • 字符串string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set /zset
各数据类型的特点
  • 字符串(string):普通字符串,Redis中最简单的数据类型
  • 哈希(hash):也叫散列,类似于Java中的HashMap结构
  • 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
  • 集合(set):无序集合,没有重复元素,类似于Java中的HashSet
  • 有序集合(sorted set / zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

请添加图片描述

1.4 Redis 常用命令
1.4.1 字符串操作命令
SET key value设置指定key的值
GET key获取指定key的值
SETEX key seconds value设置指定key的值,并将 key 的过期时间设为 seconds 秒
SETNX key value只有在 key 不存在时设置 key 的值
1.4.2 哈希操作命令
命令说明
HSET key field value将哈希表 key 中的字段 field 的值设为 value
HGET key field获取存储在哈希表中指定字段的值
HDEL key field删除存储在哈希表中的指定字段
HKEYS key获取哈希表中所有字段
HVALS key获取哈希表中所有值

请添加图片描述

1.4.3 列表操作命令

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

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

请添加图片描述

1.4.4 集合操作命令

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

命令说明
SADD key member1 [member2]向集合添加一个或多个成员
SMEMBERS key返回集合中的所有成员
SCARD key获取集合的成员数
SINTER key1 [key2]返回给定所有集合的交集
SUNION key1 [key2]返回所有给定集合的并集
SREM key member1 [member2]删除集合中一个或多个成员

请添加图片描述

  • sadd set a c b d e

  • 请添加图片描述

    • sadd set1 a c d g h i
    • 请添加图片描述
  • smembers set

  • 请添加图片描述

  • scard set1

  • 请添加图片描述

  • sinter set set1

  • 请添加图片描述

  • SUNION set set1

  • 请添加图片描述

  • srem set a b

  • 请添加图片描述

1.4.5 有序集合操作命令

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

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

Redis的通用命令是不分数据类型的,都可以使用的命令:

命令说明
KEYS pattern查找所有符合给定模式( pattern)的 key
EXISTS key检查给定 key 是否存在
TYPE key返回 key 所储存的值的类型
DEL key该命令用于在 key 存在是删除 key
  • keys *

  • 请添加图片描述

  • exists set2

  • 请添加图片描述

-请添加图片描述

  • 请添加图片描述
1.5 在Java中操作redis
1.5.1 redis 的Java客户端
  1. Jedis
  2. Lettuce
  3. Spring Data Redis
1.5.2 Spring Data Redis 使用方式

操作步骤

  1. 导入Spring Data Redis 的maven坐标请添加图片描述

  2. 配置Redis 数据源请添加图片描述

  3. 编写配置类,创建RedisTemplate对象

  4. 通过RedisTemplate对象操作Redis

    • RedisTemplate 针对大量api进行了归类封装,将同一数据类型的操作封装为对应的Operation接口,具体分类如下:
    • ValueOperations:string数据操作
    • SetOperations:set类型数据操作
    • ZSetOperations:zset类型数据操作
    • HashOperations:hash类型的数据操作
    • ListOperations:list类型的数据操作
    @Configuration  
    @Slf4j  
    public class RedisConfiguration {    @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){        log.info("开始创建redis模板类...");        RedisTemplate redisTemplate = new RedisTemplate();        // 设置Key的序列化器,默认为JdkSerializationRedisSerializer        redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setConnectionFactory(redisConnectionFactory);        return redisTemplate;  
        }  
      
    }
    

2. 店铺状态设置

2.1 需求分析和设计
2.1.1产品原型

请添加图片描述

2.1.2 接口设计
  • 设置营业状态/修改操作/put方式

    • 请添加图片描述
  • 管理端查询营业状态/查询方式get

    • 请添加图片描述
  • 用户端查询营业状态

    • 请添加图片描述

注:管理端发出的请求,统一使用/admin作为前缀
用户端发出的请求统一使用/user作为前缀

2.1.3 数据库设计

营业状态的数据存储方式:基于Redis的字符串来进行存储

2.2 代码开发
2.2.1 admin/ShopController
package com.sky.controller.admin;  
  
import com.sky.result.Result;  
import io.swagger.annotations.Api;  
import io.swagger.annotations.ApiOperation;  
import io.swagger.models.auth.In;  
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.*;  
  
/**  
* projectName: sky-take-out  
* package: com.sky.controller.admin  
* author: Amos  
* description: 设置店铺状态开发  
* date: 2024/1/21 0021 22:41:08  
* version: 1.0  
*/  
  
@RestController("adminShopController")  
@Slf4j  
@RequestMapping("/admin/shop")  
@Api(tags = "店铺相关接口")  
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);  
}  
  
  
}
2.2.2 user/ShopController
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.*;  
  
/**  
* projectName: sky-take-out  
* package: com.sky.controller.admin  
* author: Amos  
* description: 设置店铺状态开发  
* date: 2024/1/21 0021 22:41:08  
* version: 1.0  
*/  
@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);  
}  
}
2.3 代码测试
  • 设置店铺状态

    • 请添加图片描述
  • 获取店铺运营状态

    • 请添加图片描述
  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值