外卖开发(四)——redis入门以及 设置店铺营业状态
一、Redis简介
1、Redis服务启动与停止
服务启动命令,redis默认服务端口号 6379
redis-service.exe redis.windows.conf
2、客户端连接
客户端连接命令
redis-cli.exe
3、redis客户端图形工具
二、redis数据类型
三、redis常用命令、java操作redis
1、Redis的java客户端
Spring Data Redis
是Spring的一部分,对 Redis底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis
来简化操作。
操作步骤:
- 导入Spring Data Redis 的maven坐标
- 配置Redis数据源
- 编写配置类,创建RedisTemplate对象
- 通过RedisTemplate对象操作Redis
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.yml
spring:
redis:
host: localhost
port: 6379
password: 123456
添加配置类RedisConfiguration.java
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模板类...")
RedisTemplate redisTemplate = new RedisTemplate();
// 设置Key的序列化器,默认为JdkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
下面就可以使用RedisTemplate对象
操作Redis
了。
public class TestRedis {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedis(){
System.out.println(redisTemplate);
ValueOperations valueOperations = redisTemplate.opsForValue(); //字符串类型操作对象
HashOperations hashOperations = redisTemplate.opsForHash(); //hash类型操作对象
ListOperations listOperations = redisTemplate.opsForList(); //list类型操作对象
SetOperations setOperations = redisTemplate.opsForSet(); //set类型操作对象
ZSetOperations zSetOperations = redisTemplate.opsForZSet(); //有序set操作对象
}
}
2、字符串操作
Redis在java中的操作:
/**
* 操作字符串类型
*/
@Test
public void testString(){
//set get setex插入数据并设置过期时间 setnx数据不存在时才插入
redisTemplate.opsForValue().set("name","lb");
String name = (String) redisTemplate.opsForValue().get("name");
System.out.println(name);
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES); //设置过期时间,最后指定时间单位
redisTemplate.opsForValue().setIfAbsent("lock","1"); //数据库中是否已存在,未存在时才插入
}
3、Hash操作命令
Redis在java中的操作:
/**
* 操作hash类型数据
*/
@Test
public void testHash(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("100","name","lb");
hashOperations.put("100","age","23");
String name = (String) hashOperations.get("100", "name");
System.out.println(name);
Set keys = hashOperations.keys("100"); //获取key=100的所有hash的key
List values = hashOperations.values("100"); //获取所有key=100的所有hash的value
hashOperations.delete("1000","age");//删除key=1000,hashKey=age的数据
}
4、List列表操作命令
5、set集合操作命令
6、zset有序集合操作
7、通用命令
四、利用redis设置店铺状态
接口设计:(不涉及mysql数据库,所以只有controller层代码)
- 设置营业状态 (1表示正在营业,0表示打烊)
- 获取营业状态
设置营业状态
@Autowired
private RedisTemplate redisTemplate;
/**
* 设置店铺营业状态
* @param status
* @return
*/
@PutMapping("/{status}")
@ApiOperation("设置店铺营业状态")
public Result changeStatus(@PathVariable Integer status){
log.info("设置店铺营业状态为:{}",status);
redisTemplate.opsForValue().set("SHOP_STATUS",status);
return Result.success();
}
获取营业状态
/**
* 获取店铺营业状态
* @return
*/
@GetMapping("/status")
@ApiOperation("获取店铺营业状态")
public Result<Integer> getStatus(){
Integer shop_status = (Integer) redisTemplate.opsForValue().get("SHOP_STATUS");
log.info("获取店铺营业状态:{}",shop_status ==1 ? "营业中" :"打样中");
return Result.success(shop_status);
}