Redis入门

Redis简介

1
2
3
4
5
Redis 是一个基于内存的 key-value 结构数据库。

基于内存存储,读写性能高
适合存储热点数据(热点商品、资讯、新闻)
企业应用广泛

启动redis:

1
2
E:\Redis-x64-3.2.100\redis-server.exe redis.windows.conf
E:\Redis-x64-3.2.100\redis-cli.exe -h localhost -p 6379 -a 123456

redis数据类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
5种常用数据类型介绍:
Redis 存储的是 key-value 结构的数据,其中 key 是字符串类型,value 有 5 种常用的数据类型:

字符串 string
哈希 hash
列表 list
集合 set
有序集合 sorted set / zset

各种数据类型的特点:
字符串 (string):普通字符串,Redis 中最简单的数据类型
哈希 (hash):也叫散列,类似于 Java 中的 HashMap 结构,适合存储对象
列表 (list):按照插入顺序排序,可以有重复元素,类似于 Java 中的 LinkedList
集合 (set):无序集合,没有重复元素,类似于 Java 中的 HashSet
有序集合 (sorted set / zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

Redis常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
字符串操作命令:
Redis 字符串类型常用命令:

SET key value :设置指定 key 的值
GET key :获取指定 key 的值
SETEX key seconds value :设置指定 key 的值,并将 key 的过期时间设为 seconds 秒,经典应用场景为短信验证码
SETNX key value :只有当 key 不存在时才设置 key 的值


哈希操作命令:

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,常用命令:
HSET key field value :将哈希表 key 中的字段 field 的值设为 value
HGET key field :获取存储在哈希表中指定字段的值
HDEL key field :删除存储在哈希表中的指定字段
HKEYS key :获取哈希表中所有字段
HVALS key :获取哈希表中所有值

列表操作命令:

Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:
LPUSH key value1 [value2] :将一个或多个值插入到列表头部 (左边)
LRANGE key start stop :获取列表指定范围内的元素
RPOP key :移除并获取列表最后一个元素 (右边)
LLEN key :获取列表长度

集合操作命令:

Redis set 是 string 类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:
SADD key member1 [member2] :向集合添加一个或多个成员
SMEMBERS key :返回集合中的所有成员
SCARD key :获取集合的成员数
SINTER key1 [key2] :返回给定所有集合的交集
SUNION key1 [key2] :返回所有给定集合的并集
SREM key member1 [member2] :删除集合中一个或多个成员

有序集合操作命令:
Redis 有序集合是 string 类型元素的集合,且不允许有重复成员。每个元素都会关联一个 double 类型的分数。常用命令:

ZADD key score1 member1 [score2 member2] :向有序集合添加一个或多个成员
ZRANGE key start stop [WITHSCORES] :通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increment member :有序集合中对指定成员的分数加上增量 increment
ZREM key member [member ...] :移除有序集合中的一个或多个成员

通用命令:
Redis 的通用命令是不分数据类型的,都可以使用的命令,因为都是在操作 key:
KEYS pattern :查找所有符合给定模式 (pattern) 的 key
EXISTS key :检查给定 key 是否存在
TYPE key :返回 key 所储存的值的类型
DEL key :该命令用于在 key 存在时删除 key

在Java中操作Redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Redis的Java客户端
Redis 的 Java 客户端很多,常用的几种:

Jedis
Lettuce
Spring Data Redis
Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用 Spring Data Redis 来简化操作。

Spring Data Redis使用方式
操作步骤:

导入 Spring Data Redis 的 maven 坐标

配置 Redis 数据源

编写配置类,创建 RedisTemplate 对象:

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();

//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);

//设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());

return redisTemplate;
}
}

通过 RedisTemplate 对象操作 Redis

店铺营业状态设置

需求分析和设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
由于本项目约定:

管理端发出的请求,统一使用 /admin 作为前缀
用户端发出的请求,统一使用 /user 作为前缀
所以查询营业状态这个操作我们需要设计成两个接口。当然,这样设计也是有好处的,我们可以很容易地判断这个请求是来自用户端还是管理端。

接口设计:

设置营业状态

管理端查询营业状态

用户端查询营业状态

营业状态数据存储方式:基于 Redis 的字符串来进行存储。约定:1 表示营业;0 表示打烊。

代码开发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
新建控制类 ShopController,专门用来存放店铺相关接口,然后开发设置店铺营业状态和管理端查询营业状态两个接口:
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("adminShopController") //与用户端的ShopController区分开
@RequestMapping("/admin/shop")
@Slf4j
@Api("店铺操作相关接口")
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 Result.success(status);
}
}

用户端查询营业状态接口开发:
用户端查询营业状态这个接口的逻辑和管理端的一模一样,所以我们可以先在 controller 包下新建 user 包用来存放用户端的控制类,然后将管理端的
ShopController 复制一份到 user 包下,再稍加修改即可


功能测试

前后端联调即可

HttpClient

介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HttpClient 作用:

发送 HTTP 请求
接收响应数据
核心API:

HttpClient
HttpClients
CloseableHttpClient
HttpGet
HttpPost
发送请求步骤:

创建 HttpClient 对象
创建 Http 请求对象
调用 HttpClient 的 execute 方法发送请求

微信小程序开发

准备工作

1
2
3
4
5
6
7
8

开发微信小程序之前需要做如下准备工作:

注册小程序
完善小程序信息
下载开发者工具

这里不再赘述,反正巴拉巴拉就整完了

微信登录