当前位置: 首页 > news >正文

【苍穹外卖项目】Day05

📘博客主页:程序员葵安

🫶感谢大家点赞👍🏻收藏⭐评论✍🏻

一、Redis入门

Redis简介

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

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

二、Redis数据类型

5种常用数据类型

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

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

三、Redis常用命令

字符串操作命令

  • SET key value                                设置指定key的值
  • GET key                                         获取指定key的值
  • SETEX key seconds value            设置指定key的值,并将key的过期时间设为seconds秒
  • SETNX key value                          只有在key不存在时设置key的值

哈希操作命令

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象,常用命令:

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

列表操作命令

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

集合操作命令

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

有序集合操作命令

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

通用命令

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

四、Java中操作Redis

Redis的Java客户端

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

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring Data Redis 是 Springs 的一部分,对 Redis 底层开发包进行了高度封装。

在 Spring 项目中,可以使用Spring Data Redis简化操作

Spring Data Redis使用方式

操作步骤:

  1. 导入Spring Data Redis的 maven坐标

  2. 配置Redis数据源

  3. 编写配置类,创建RedisTemplate对象
    @Configuration
    @Slf4j
    public class RedisConfiguration {public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("开始创建Redis模板对象...");RedisTemplate redisTemplate = new RedisTemplate();// 设置redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
    }
  4. 通过RedisTemplate对象操作Redis
    @SpringBootTest
    public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){System.out.println(redisTemplate);//string数据操作ValueOperations valueOperations = redisTemplate.opsForValue();//hash类型的数据操作HashOperations hashOperations = redisTemplate.opsForHash();//list类型的数据操作ListOperations listOperations = redisTemplate.opsForList();//set类型数据操作SetOperations setOperations = redisTemplate.opsForSet();//zset类型数据操作ZSetOperations zSetOperations = redisTemplate.opsForZSet();}
    }

五、店铺营业状态设置

需求分析接口设计

接口设计:

  • 设置营业状态

  • 管理端查询营业状态

  • 用户端查询营业状态

注:从技术层面分析,其实管理端和用户端查询营业状态时,可通过一个接口去实现即可。因为营业状态是一致的。但是,本项目约定:

  • 管理端发出的请求,统一使用/admin作为前缀。

  • 用户端发出的请求,统一使用/user作为前缀。

因为访问路径不一致,故分为两个接口实现。

代码开发

根据接口定义创建ShopController的setStatus设置营业状态方法:

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.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {public static final String KEY = "SHOP_STATUS";@Autowiredprivate 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();}
}

根据接口定义创建ShopController的getStatus查询营业状态方法:

	/*** 获取店铺的营业状态* @return*/@GetMapping("/status")@ApiOperation("获取店铺的营业状态")public Result<Integer> getStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(KEY);log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");return Result.success(status);}

根据接口定义创建ShopController的getStatus查询营业状态方法:

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.*;@RestController("userShopController")
@RequestMapping("/user/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {public static final String KEY = "SHOP_STATUS";@Autowiredprivate 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);}
}

http://www.lryc.cn/news/606715.html

相关文章:

  • PyTorch基础——张量计算
  • IO流-文件实例
  • 力扣-最大单词长度乘积
  • 鸿蒙智能居家养老系统构思(续二)—— 适老化烹饪中心详细构思
  • C#实现左侧折叠导航菜单
  • 思途JSP学习 0801
  • 退出python的base环境
  • 【常见分布及其特征(8)】连续型随机变量-正态分布*
  • JAVA结合AI
  • 高速公路桥梁安全监测系统解决方案
  • k8s云原生rook-ceph pvc快照与恢复(下)
  • 如何保护 Redis 实例的安全?
  • C++对象访问有访问权限是不是在ide里有效
  • 解决MySQL不能编译存储过程的问题
  • Rust → WebAssembly 的性能剖析全指南
  • (一)React +Ts(vite创建项目)
  • Activity之间互相发送数据
  • django的数据库原生操作sql
  • 注解退散!纯XML打造MyBatis持久层的终极形态
  • 第11届蓝桥杯Python青少组_国赛_高级组_2020年10月真题
  • 人员定位卡人脸智能充电发卡机
  • 赛博算命之八字测算事业运势的Java实现(四柱、五行、十神、流年、格局详细测算)
  • Python match-case 模式匹配详解
  • Unity优化技巧:自动隐藏视野外的3D模型
  • Python爬虫实战:研究pycares技术构建DNS解析系统
  • 玻尔兹曼分布与玻尔兹曼探索
  • 从比划沟通到指令同步:声网让跨国游戏升级
  • 什么是爬虫协议?
  • Unity相机控制
  • Sklearn 机器学习 文本数据 TF-IDF实现文本向量化