苍穹外卖Day05总结

        Day05主要就是如何使用Redis,这里面我们使用了Spring Data Redis,并基于它实现了店铺营业状态设置。

1.Spring Data Redis的使用

首先要导入maven坐标:

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

然后在配置文件中中配置数据源:

sky:
  redis:
    host: 
    port: 
    password: 
    database: 

最后编写配置类,创建RedisTemplate对象:

(这里不是必须的,因为我们要改变序列化器,所以在这里重新创建一下)

@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

接下来就可以注入RedisTemplate对象进行使用了。

2.店铺营业状态设置

营业状态设置功能分为管理端设置、管理端查询和用户端查询,但是实现比较简单,直接操作RedisTemplate对象就可以,不需要经过service层。

管理端设置:
 

    @PutMapping("/{status}")
    @ApiOperation("设置店铺的营业状态")
    public Result setStatus(@PathVariable Integer status){
        log.info("设置店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        redisTemplate.opsForValue().set(KEY,status);
        return Result.success();
    }

管理端查询:

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

用户端查询:
 

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

### 苍穹外卖 Day 功能配置与时间处理 在苍穹外卖项目的学习过程中,关于日期或时间设置的功能配置是一个常见的关注点。以下是对此主题的详细解析: #### 1. **时间戳的应用** 在软件开发中,时间戳通常用于记录事件发生的具体时刻。对于苍穹外卖这样的应用来说,订单创建时间、配送预计完成时间等功能都需要依赖于精确的时间管理[^1]。 ```python import time # 获取当前时间戳 current_timestamp = int(time.time()) print(f"Current Timestamp: {current_timestamp}") ``` 通过上述代码可以获取到当前的时间戳,并将其存储至数据库以便后续使用。这种做法能够有效减少因时区差异带来的误差问题[^2]。 #### 2. **定时任务调度** 为了实现某些特定时间段内的操作自动化执行(比如每日凌晨清理过期数据),可以通过 `APScheduler` 库来设定周期性的后台作业计划表[^3]。 ```python from apscheduler.schedulers.background import BackgroundScheduler def clean_expired_data(): print("Cleaning expired data...") scheduler = BackgroundScheduler() scheduler.add_job(clean_expired_data, 'cron', hour=0, minute=0) # 设置每天零点运行一次 scheduler.start() try: while True: time.sleep(2) except (KeyboardInterrupt, SystemExit): scheduler.shutdown() ``` 此段脚本展示了如何利用 APScheduler 来安排每晚午夜自动清除旧资料的任务实例。 #### 3. **前端显示本地化时间** 当涉及到跨区域用户的交互界面设计时,则需考虑不同地区的用户看到的是他们所在位置对应的标准时间而非统一服务器端时间。因此,在返回给客户端的数据包里附带原始 UTC 时间的同时也要提供转换方法让浏览器自行调整成适合访问者的当地时间格式。 ```javascript function convertToLocalTime(utcDate){ const localDate = new Date(utcDate); return `${localDate.toLocaleDateString()} ${localDate.toLocaleTimeString()}`; } console.log(convertToLocalTime('2024-01-01T00:00:00Z')); ``` 以上 JavaScript 函数接受一个 ISO 字符串形式表示的世界协调世界时作为输入参数并输出经过变换后的当地实际可见版本字符串结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值