当前位置: 首页 > 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.dtcms.com/a/309998.html

相关文章:

  • draw_ctx中clip_area和buf_area的区别,为什么看起来差不多?
  • 第四篇:材质与纹理:让物体“真实“起来
  • Linux选择
  • evo_traj的参数设置及保存图片
  • van list 重复进入onload
  • c++和python联合编程示例
  • Conda install安装了一些库,如何撤销操作
  • 《n8n基础教学》第一节:如何使用编辑器UI界面
  • Day17--二叉树--654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树
  • chroma、faiss和milvus三者之间的区别和联系
  • 数据结构——查找(一、什么是查找?)
  • 通过观看数百个外科手术视频课程来学习多模态表征|文献速递-医学影像算法文献分享
  • OpenVLA: 论文阅读 -- 开源视觉-语言-行动模型
  • 我用提示词A 对qwen3-4b大模型进行 nl2sql 任务 grpo 强化学习,评估的时候换新提示词,会影响nl2sql测评准确率吗?
  • IOMMU Client设备DMA配置过程分析(九)
  • “物联网+技校”:VR虚拟仿真实训室的发展前景
  • ALOcc: Adaptive Lifting-based 3D Semantic Occupancy and
  • Python爬虫实战:研究pycares技术构建DNS解析系统
  • Web开发-PHP应用组件框架前端模版渲染三方插件富文本编辑器CVE审计
  • 从0到1学PHP(十四):PHP 性能优化:打造高效应用
  • 基于 USBD 库 CDC Standalone 例程中的一个 Bug 解析
  • 在多租户或多服务共享 Redis 时,如何做逻辑隔离或权限控制?
  • Docker Compose入门(2)
  • QD9361开发板教程:基于MIG IP的PL端DDR3测试
  • Manus Wide Research:重新定义AI多智能体并发处理的技术革命
  • windows内核研究(软件调试-调试事件的处理)
  • 无图形界面的CentOS 7网络如何配置
  • 大模型结构比较
  • QT中字符串加tr u8的意思
  • Flink Checkpoint机制:大数据流处理的坚固护盾