一、Redis入门
Redis是一种基于内存的key-value结构的数据库
Mysql是二维表结构的数据库
Redis基于内存,读写性能高
适用于存储热点数据(热点商品、资讯、新闻)
1.1 Redis 的基本数据类型
在Redistribution中,key是以String类型存储的,value有五种基本类型:字符串、哈希、列表、集合、有序集合。
1.2 Redis常用命令
1.2.1 字符串操作命令
1.2.3 哈希操作命令
1.2.3列表操作命令
注意列表操作命令中如Lpush 中的‘L’不是list的意思,而是left的意思,表示从列表左侧对数据进行操作,RPOP命令同理,表示从列表右侧进行数据操作。
1.2.4 集合操作命令
1.2.5 有序集合操作命令
1.2.6 通用命令
二、在Java中使用Redis
Spring Date Redis 是spring的一部分,对Redis底层开发包进行了高度分装。
在spring项目中,可以使用Spring Date Redis简化操作。
配置类:
2.1步骤
2.1.1 导入Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.1.2 配置Redis数据源
yml文件:
redis:
host: ${sky.redis.host}
port: ${sky.redis.port}
database: ${sky.redis.database}
dev.yml文件:
redis:
host: localhost
port: 6379
database: 10
这里因为我redis没有设置密码,所以没有添加。
redis会默认生成16个数据库(0-15)database:10表示选择用10号数据库
2.1.3 编写配置类
package com.sky.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建Redis模板对象...");
RedisTemplate redisTemplate = new RedisTemplate();
//传入连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置Redis key的序列化key
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
RedisTemplate提供的五种对不同数据类型操作的对象:
2.2 操作方法
2.2.1 对字符串String的操作
2.2.2对哈希结构进行操作
2.2.3 操作列表
2.2.4 操作集合
2.2.5 操作有序集合
2.2.6 操作通用命令
三、店铺营业状态设置
需要接口:
修改营业状态的接口
管理端查询营业状态的接口
用户端查询营业状态的接口
营业状态数据,使用Redis来存储。(若单纯为这一个字段创建一个表不划算)
代码开发
因为管理端和用户端的controller层中的类名相同,在spring boot中默认使用单例模式,spring会初始化一个controller对象,默认为类名小写。若两个类名相同,就需要在@RestController后面重新命名。
admin/controller层
package com.sky.controller.admin;
import com.sky.result.Result;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import java.security.Key;
@RestController("adminShopController")
@Slf4j
@RequestMapping("/admin/shop")
@Api(tags="店铺操作接口")
public class ShopController {
public static final String KEY = "SHOP_STATUS";
@Autowired
RedisTemplate redisTemplate;
/**
* 修改店铺状态
* @param status
* @return
*/
@PutMapping("/{status}")
public Result setStatus(@PathVariable Integer status){
log.info("店铺状态修改为:{}",status==1?"营业中":"已打烊");
redisTemplate.opsForValue().set(KEY,status);
return Result.success();
}
/**
* 查询店铺状态
* @return
*/
@GetMapping("status")
public Result<Integer> getStatus(){
Integer shopStatus = (Integer) redisTemplate.opsForValue().get(KEY);
log.info("查询到的店铺状态为:{}",shopStatus==1?"营业中":"已打烊");
return Result.success(shopStatus);
}
}
user/controller层
package com.sky.controller.user;
import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
@RestController("userShopController")
@Slf4j
@RequestMapping("/user/shop")
@Api(tags = "店铺操作接口")
public class ShopController {
public static final String KEY = "SHOP_STATUS";
@Autowired
RedisTemplate redisTemplate;
/**
* 查询店铺状态
* @return
*/
@GetMapping("/status")
@ApiOperation("查询店铺状态")
public Result<Integer> getStatus(){
Integer shopStatus = (Integer) redisTemplate.opsForValue().get(KEY);
log.info("查询到的店铺状态为:{}",shopStatus==1?"营业中":"已打烊");
return Result.success(shopStatus);
}
}