苍穹外卖day05——Redis(被病毒入侵)+店铺营业状态设置

Redis被病毒入侵了

 数据删光光然后只剩这四个玩意,乱下东西乱删东西,还好是docker部署,不然就寄了。

在服务器上部署redis记得一定要设置密码,不然被人扫肉鸡注入病毒整个服务器给你崩掉。

使用配置类的方式搭建相关程序

配置数据源:

规范的写法是通过引用的方式将东西都配置在另一个配置文件里面,将来涉及到分布式和微服务时,这个配置类就会放到nacos上了,然后项目启动都是从nacos里面取配置项了。

 被引用的配置文件。

 编写配置类:

新建一个配置类如下

@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;
    }
}

 操作String类型的数据

根据传进去的参数个数对应不同的Redis语句

 在这里不管传进去什么都会被转成String字符串存在Redis里面,所以这里虽说是传对象进去,但是也叫做字符串操作类型。

狗日的,连半天都连不上,原来是密码和服务器IP错了。

@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;


    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        redisTemplate.opsForValue().set("city","北京");
    }

    /**
     * 操作字符串类型的数据
     */
    @Test
    public void testString(){
        //set get setex setnx
        redisTemplate.opsForValue().set("city","北京");
        String city = (String)redisTemplate.opsForValue().get("city");
        System.out.println(city);
        redisTemplate.opsForValue().set("code","666",3, TimeUnit.MINUTES);//设置3分钟过期
        redisTemplate.opsForValue().setIfAbsent("lock","1");//不存在才插入
        redisTemplate.opsForValue().setIfAbsent("lock","2");//插入失败
    }
}

执行testString后可以看见有如下数据,数据发生乱码。

 如果在序列器中不设置,就是使用默认的序列化器的话,key会如下

 然后虽然字符串存成了这种格式,但是在java代码中是可以在获取时自动转回来的。

无非就是对别的客户端不友好。

操作Hash类型的数据

    /**
     * 操作hash类型的数据
     */
    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("100","name","tom");
        hashOperations.put("100","age","20");

        String name = (String)hashOperations.get("100", "name");
        System.out.println(name);
        //获取这个哈希数据下所有的key
        Set keys = hashOperations.keys("100");
        System.out.println(keys);
        //获取这个哈希数据下所有的value
        List values = hashOperations.values("100");
        System.out.println(values);
        //删除这个哈希数据下的一个键值对
        hashOperations.delete("100","age");
        
    }

 输出如下

 操作其他类型的数据

 

 店铺营业状态设置——需求分析与设计

产品原型 

 接口设计

 

用户端的接口 

 数据库设计

使用Redis来存储,高射炮打蚊子,很符合的一句形容。

 店铺营业状态设置——代码开发

管理端相关代码

@RestController("adminShopController")
@Api("店铺相关接口")
@RequestMapping("/admin/shop")
@Slf4j
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 status;
    }
}

用户端的相关代码

@RestController("userShopController")
@Api("店铺相关接口")
@RequestMapping("/user/shop")
@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 status;
    }
}

 店铺营业状态设置——功能测试

Swagger接口文档测试

设置状态

 

前后端联调测试

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值