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 null;
}
}
用户端的相关代码
@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 null;
}
}
店铺营业状态设置——功能测试
Swagger接口文档测试
设置状态
前后端联调测试