课程内容
- Redis入门
- Redis数据类型
- Redis常用命令
- 在Java中操作Redis
- 店铺营业状态设置
Redis入门
Redis简介
- 基于内容的key - value结构数据库
- 基于内存存储 读写性能高
- 适合存储热点数据(热点商品 咨询 新闻)
- 互联网技术领域使用最为广泛的存储中间件
- 中文网站 www.redis.net.cn
下载与安装
- https://github.com/microsoftarchive/redis/releases
- 或者直接使用黑马提供的压缩包
- 无需安装 解压后即可使用
如何启动
- 在安装目录中启动cmd
- 输入
redis-server.exe redis.windows.conf
- 默认端口号为6379
- 通过ctrl+c快捷键停止服务
- 通过residis-cli.exe连接服务
- 可以通过指定如下参数连接
- -h ip地址
- -p 端口号
- -a 密码
- 执行
keys *
判断服务启动是否成功
修改配置文件
- 修改redis.windows.conf设置服务密码
- 找到
#requirepass foobared
- 去掉注释符号 在后面加上自己设置的密码
- 如
requirepass 123456
- 修改密码后要重启redis服务才生效
- 可安装客户端图形工具Another-Redis-Desktop-Manager
Redis数据类型
五种常用数据类型介绍
- Redis存储的是key-value结构的数据
- 秋中key是字符串类型
- value有五种常用的数据类型
字符串string
- 普通字符串 Redis中最简单的数据类型
哈希hash
- 也叫散列
- 类似java中的HashMap结构
- 每个哈希中包含多个filed和value
列表list
- 按照插入顺序排序
- 可以有重复元素
- 类似java中的LinkedList
集合set
- 无序集合
- 没有重复元素
- 类似java中的HashSet
有序集合sorted set
- 集合汇总每个元素关联一个分数score
- 根据分数升序排序
- 没有重复元素
Redis常用命令
- 与mysql完全不同
- 不同数据类型的操作命令也不同
- 也存在部分通用命令
字符串操作命令
- SET key value 设置指定key的值
- GET key 获取指定key的值
- SETEX key seconds value 设置指定key的值 并将key的过期时间设为seconds秒
- SETNX key value 只有key不存在时设置key的值
- 实际上不区分大小写
哈希操作命令
- HSET key field value 将哈希表 key 中的字段 field 的值设为 value
- HGET key field 获取存储在哈希表中指定字段的值
- HDEL key field 删除存储在哈希表中的指定字段
- HKEYS key 获取哈希表中所有字段
- HVALS key 获取哈希表中所有值
列表操作命令
- LPUSH key value1 [value2] 将一个或多个值插入到列表头部
- LRANGE key start stop 获取列表指定范围内的元素
- RPOP key 移除并获取列表最后一个元素
- LLEN key 获取列表长度
- BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止
集合操作命令
- SADD key member1 [member2] 向集合添加一个或多个成员
- SMEMBERS key 返回集合中的所有成员
- SCARD key 获取集合的成员数
- SINTER key1 [key2] 返回给定所有集合的交集
- SUNION key1 [key2] 返回所有给定集合的并集
- SREM key member1 [member2] 移除集合中一个或多个成员
有序集合操作命令
- ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
- ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
- ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
- ZREM key member [member …] 移除有序集合中的一个或多个成员
通用命令
- KEYS pattern 查找所有符合给定模式( pattern)的 key
- EXISTS key 检查给定 key 是否存在
- TYPE key 返回 key 所储存的值的类型
- DEL key 该命令用于在 key 存在是删除 key
在Java中操作Redis
- Redis的Java客户端
- 常用的包括
- Jedis
- Lettuce
- Spring Data Redis
- Spring Data Redis
- 导入maven坐标
- 配置Redis数据源
- 编写配置类 创建RedisTemplate对象
- 通过RedisTemplate对象操作Redis
配置Redis环境
- 对应的maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 在application文件中配置数据源
- 在datasource中添加host port password等数据
redis:
host: ${sky.redis.host}
port: ${sky.redis.port}
password: ${sky.redis.password}
database: ${sky.redis.database}
- 具体数值放在application-dev中
- database: 指定使用Redis的哪个数据库
- redis服务启动后默认有16个数据库
编写配置类
- 创建RedisTemplate对象
- 在config包里实现
- 创建RedisConfiguration类
@Slf4j
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
// 设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key但是序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
店铺营业状态设置
需求分析
- 点击营业状态按钮时 弹出更改营业状态
- 选择营业 设置餐厅为营业中状态
- 选择打烊 设置餐厅为打烊中状态
- 设置营业状态
- 管理端查询状态
- 用户端查询状态
- 管理端和营业端访问路径不一样 设计两个接口
代码开发
Controller
- 在sky-sever中 创建ShopController.java
- 创建setStatus设置营业状态方法
- 以及查询状态方法
@Slf4j
@RequestMapping("admin/shop")
@Api(tags = "店铺相关接口")
@RestController("adminShopController")
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();
}
@GetMapping("/status")
@ApiOperation("获取店铺的营业状态")
public Result<Integer> getStatus(){
Integer shop_status = (Integer) redisTemplate.opsForValue().get(KEY);
return Result.success(shop_status);
}
}
- 创建controller.user包用户端controller
- 在该包下创建ShopController
- 同样创建查询营业状态方法
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")
@RequestMapping("/user/shop")
@Api(tags = "店铺相关接口")
@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 Result.success(status);
}
}