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 {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){System.out.println(redisTemplate);redisTemplate.opsForValue().set("city","北京");}/*** 操作字符串类型的数据*/@Testpublic void testString(){//set get setex setnxredisTemplate.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类型的数据*/@Testpublic void testHash(){//hset hget hdel hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("100","name","tom");hashOperations.put("100","age","20");String name = (String)hashOperations.get("100", "name");System.out.println(name);//获取这个哈希数据下所有的keySet keys = hashOperations.keys("100");System.out.println(keys);//获取这个哈希数据下所有的valueList 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";@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();}/*** 获取店铺营业状态* @return*/@GetMapping("/status")@ApiOperation("获取店铺营业状态")public Result<Integer> getStatus(){Integer status = (Integer)redisTemplate.opsForValue().get(KEY);log.info("获取到店铺营业状态为:{}",status==1?"营业中":"打样中");return null;}
}
用户端的相关代码
@RestController("userShopController")
@Api("店铺相关接口")
@RequestMapping("/user/shop")
@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 null;}
}
店铺营业状态设置——功能测试
Swagger接口文档测试
设置状态
前后端联调测试