自己负责的模块

商品赠品互转的流程实现

  1. 定义商品赠品互转的数据模型,通常包括以下字段:

    • 源商品ID
    • 目标商品ID
    • 转换条件(例如需要的商品数量和赠品数量)
    • 转换时间段(例如开始时间和结束时间)
  2. 创建商品赠品互转的业务逻辑层,实现商品赠品互转的具体业务逻辑,例如根据用户选择的源商品ID和目标商品ID,查询对应的转换规则,并根据转换条件和转换时间段判断是否可以进行转换。

  3. 实现商品赠品互转的数据访问层,提供CRUD(创建、读取、更新、删除)操作,实现对转换规则的增删改查功能。

  4. 创建商品赠品互转的控制器层,提供RESTful API接口,用于接收用户的请求和返回响应数据。

  5. 实现商品赠品互转的前端界面,用于展示转换规则和操作转换。

  6. 对商品赠品互转功能进行测试和验证,确保功能的稳定性和安全性。

缓存

1.缓存穿透

当查询一个不存在的数据,缓存中是没有的,将会查询数据库,但是数据库也没有这个数据,并且没有把这次查询的null值存到缓存中,导致每次查询都会到数据层查询,失去了缓存的意义

风险:如果有人利用不存在的数据进行攻击,数据库瞬时压力增大,导致崩溃。

解决:null结果缓存,并加入短暂过期时间

2.缓存雪崩

设置缓存时key采用了相同的过期时间,导致在某一时间同时失效,请求全部到数据库,导致雪崩

解决:在原有的失效时间上增加一个时间随机值,这样每个缓存的过期时间重复率会降低。

3.缓存击穿

对一些设置了过期时间的key,如果此时的key被高频访问(为苹果手机的id),同时此key时间过期,那么所有的请求都会到数据库,导致数据库崩溃,称为缓存击穿

解决:加锁,大量并发只让一个去查,其他人等待,查到之后释放锁,存到缓存中,其他人获取锁,查到缓存中有数据,就不用到数据库中去查  

认证服务

1.短信验证码

  1. 前端页面:用户在前端页面输入手机号码,点击获取验证码按钮发送请求获取验证码。
  2. 服务端逻辑:后端接收到获取验证码请求后,生成验证码并存储到缓存中(如 Redis)并返回给前端。同时,生成一个唯一标识符并存储到缓存中,用于后续验证验证码的请求。
  3. 前端页面:用户输入手机号码和收到的验证码后,点击登录按钮发送登录请求。
  4. 服务端逻辑:后端接收到登录请求后,从缓存中获取存储的验证码和唯一标识符,进行验证。如果验证通过,从数据库中查询该手机号对应的用户信息,生成登录态(如 token),并返回给前端。
  5. 前端逻辑:前端收到登录成功的响应后,将登录态保存到本地,下次请求时携带登录态进行身份验证。

下面是一份简单的 Java 示例代码,实现了手机验证码登录:

 1 // 发送验证码
 2 @GetMapping("/sendSmsCode")
 3 public ResponseEntity<String> sendSmsCode(@RequestParam("phone") String phone) {
 4     // 生成验证码
 5     String code = generateSmsCode();
 6     // 存储验证码到 Redis,有效期为 5 分钟
 7     redisTemplate.opsForValue().set("sms:code:" + phone, code, Duration.ofMinutes(5));
 8     // 生成并存储唯一标识符到 Redis,有效期为 5 分钟
 9     String uuid = UUID.randomUUID().toString();
10     redisTemplate.opsForValue().set("sms:uuid:" + uuid, phone, Duration.ofMinutes(5));
11     // 发送验证码到手机
12     sendSms(phone, code);
13     // 返回唯一标识符给前端
14     return ResponseEntity.ok(uuid);
15 }
16 
17 // 验证验证码并登录
18 @PostMapping("/loginBySmsCode")
19 public ResponseEntity<String> loginBySmsCode(@RequestParam("phone") String phone,
20         @RequestParam("code") String code, @RequestParam("uuid") String uuid) {
21     // 从 Redis 中获取存储的验证码
22     String storedCode = redisTemplate.opsForValue().get("sms:code:" + phone);
23     // 从 Redis 中获取存储的唯一标识符对应的手机号码
24     String storedPhone = redisTemplate.opsForValue().get("sms:uuid:" + uuid);
25     if (storedCode == null || storedPhone == null || !storedCode.equals(code) || !storedPhone.equals(phone)) {
26         // 验证失败
27         return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("验证码错误或已过期");
28     }
29     // 验证成功,查询数据库获取用户信息
30     User user = userService.getUserByPhone(phone);
31     if (user == null) {
32         return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("用户不存在");
33     }
34     // 生成登录态
35     String token = generateToken(user);
36     // 返回登录态
37     return ResponseEntity.ok(token);
38 }

 

购物车服务

 

订单服务

1.微信支付功能

  1. 注册微信商户平台账号,进行身份认证和商户信息设置。
  2. 在商户平台中创建支付应用,获得应用ID和应用密钥等必要信息。
  3. 在后端服务器上编写调用微信支付API的代码。可以使用官方提供的Java SDK,也可以使用第三方库或者自己实现。
  4. 前端页面集成微信支付组件,调用后端接口获取支付参数并完成支付。
  5. 支付成功后,微信服务器会通过回调通知商户后端服务器支付结果,商户后端需要对支付结果进行校验并更新订单状态。
posted @ 2023-04-20 20:53  空空大首领  阅读(24)  评论(0编辑  收藏  举报