当前位置:首页 > 标签
SpringBoot 14 Spring 2 SpringMVC 3 MyBatis 2 Linux 4 阿里云 13 宝塔 1 Docker 3 ElasticSearch 2 Redis 4 Shiro 0 Dubbo 0 Swagger 0 Thymeleaf 6 数据库 11 MySQL 11 外键 2 Gradle 1 Test 0 Tomcat 1 JavaWeb 7 Ajax 1 注解 3 css 2 报错 3 多数据源 1 Java基础 1 源码 2 Servlet 1 JSP 1 环境搭建 8 RabbitMQ 1 七牛云 1 Edit.md 1 图像识别 4 英语 2 Zookeeper 1Linux服务器安装Redis(Docker安装,解压缩包安装)
- 2020-04-28
- 183
- Redis
前不久 Redis 远程连接失败,又重装了几遍 Redis(后来发现时端口没开放的原因......),特此记录一下。
今天主要讲解 2 中 Redis 的安装方式,一种是利用 Docker 安装,另一种是解压缩包安装。
### 利用 Docker 安装 Redis
##### (1) 首先来到 Docker Hub 官网
进入官网之后,搜索 Redis,然后可以看到如下图所示

由于我们之前配置过阿里云的镜像,所以这里 docker pull redis 就行了
#####(2)服务器上安装 Redis
连接服务器,首先查看已有的镜像
`docker images`

然后执行 `docker pull redis`,稍作等待即可,之后再查看已有的镜像,发现多了一个 Redis 的镜像,说明安装成功。

#####(3)启动 Redis
- -d 代表后台运行
- -p 代表端口映射
- --name 给我们的容器起一个名字
- 最后面填写需要启动的镜像的名字

**当然,这里也可以指定本地配置文件启动,这里没有展示**
---
> 关于设置密码(可以通过命令设置,或者通过配置文件设置)


#####(4)本地连接测试
查看容器状态并测试

#####(5)远程连接测试
启动 Redis Desktop Manager,连接并输入密码

Redis远程连接失败,采坑记录!
- 2020-04-28
- 185
- Redis
使用 Redis DeskTop Manager 远程连接失败,如下图所示:

#### 阿里云服务器防火墙
一开始怀疑是阿里云服务器的防火墙问题(**呵呵,事情要是有这么简单就好了**),但是开放防火墙端口之后依然保持,然后想到了配置文件的问题。
#### Redis配置文件
检查了我的配置文件,发现 `bind 127.0.0.1` 已经注释了,保护模式 `protected-mode no` 也已经是改为了no,可是还是报错连接不上。
**又经过详细的检查,确定配置文件和阿里云服务器防火墙都没有问题之后。突然想到会不会是我的服务器端口没开啊?**
#### 检测服务器端口 6379 是否开放
```
firewall-cmd --query-port=6379/tcp
```
结果显示----》

我裂开了。。。。居然还真的是端口没开
那好办了,开放端口即可
```
firewall-cmd --add-port=6379/tcp
```
再次连接,连接成功(记得要重启 Redis 噢)

#### 总结,需要注意的事项
#####(1)确保阿里云服务器的防火墙放行 6379 端口

#####(2)确保自己的服务器开启 6379 端口,需要返回 yes

#####(3)检查配置文件
- 注释掉 bind 127.0.0.1(不注释的话就只能本机连接)
- 保护模式默认是开启的,需要关闭,即修改为 `protected-mode no`
- 同时启动时还有改为守护进程启动(后台启动)`daemonize yes`

Redis整合SpringBoot实现缓存
- 2020-04-26
- 163
- Redis
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作**数据库**、**缓存**和**消息中间件**。
那么今天我们就利用Redis来替换SpringBoot原有的缓存。
> 主要理解 “原理分析” 部分的内容
### 关于 Redis
这里主要掌握 Redis 的5大基本数据类型象以及常用的命令即可,因为后面的方法名称和命令都是一一对应的。
### SpringBoot原有的缓存
#### 缓存实现原理
在SpringBoot中,有很多缓存配置类 xxxCacheConfiguration,例如 `RedisCacheConfiguration`,`SimpleCacheConfiguration`等。
这些 xxxCacheConfiguration 的作用就是创建 CacheManage,并把它放到 Spring 容器当中。
然后CacheManage用来管理各种缓存组件。
#### 4个常用注解
使用缓存,主要就是使用一下4个注解
#####(1)@ EnablecCaching
放在主启动类上,用于开启基于注解的缓存
#####(2)@ Cacheable
放在方法上,将方法的运行结果进行缓存,之后再要获取相同的数据时,直接从缓存中获取即可,经常用于 **select** 操作。
#####(3)@ CachePut
调用方法的同时又更新缓存,即无论如何都会调用方法,经常用于 **update** 操作。
#####(4)@ CacheEvict
清除缓存,经常用于 **delete** 操作
### Java 操作 Redis
之前我们都是通过命令行的方式来操作Redis,现在我们可以使用 `Jedis` 来操作 Redis。
Jedis 实际上就是一个Redis官方提供的用来操作Redis的工具,可以理解为像JDBC一样操作数据库的工具。
- Github地址:https://github.com/xetorthio/jedis
- Maven仓库地址:https://mvnrepository.com/artifact/redis.clients/jedis
#####(1)如何使用
实际上在 github 已经说得特别明白了

- **告诉我们在 test 里面有很多 example,我们可以去查看**
- **在 wiki 里面有很多有趣的东西,关于连接池的东西。
**
由于代码比较简单,直接创建 Jedis 对象,然后调用方法即可
### Redis整合SpringBoot之操作Redis数据库(重点)
像这种某样技术和SpringBoot整合的话,按照一般套路,都是需要导入 `xxx-starter` 之类的依赖。
例如MyBatis和SpringBoot整合就是导入 `mybatis-spring-boot-starter`
- SpringBoot官网关于starter地址:https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/using-spring-boot.html#using-boot-starter
在官网上我们看到了这个:

那好办了,直接导入依赖即可。
#####(1)导入对应依赖
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
##### (2)进行相关配置
子啊 Jedis 中,我们连接 Redis 时,主机地址和端口号是在构造方法中传入的,而在SpringBoot中,我们在 application.properties(或者application.yaml) 中配置主机地址即可。
```
spring.redis.host=39.98.86.223
spring.redis.port=6379
```
其他配置可以在 `RedisProperties` 中查看
##### (3)原理分析
看原理就肯定要看看SpringBoot是如何自动配置的,所以点开 `RedisAutoConfiguration` 看看

之后我们又发现,这个 RedisOperation 类就在我们的导入的 redis-starter 里面。
**所以,当我们导入 redis 的 starter 之后,就会自动引入了 RedisOperation 类,触发了自动配置条件,所以 RedisAutoConfiguration 配置生效了。**
再仔细看看,发现里面有2个方法,分别返回了 RedisTemplate 和 StringRedisTemplate,这2个类就是用来操作 Redis,我们使用的时候拿来即用,直接注入即可。
##### (4) 使用 RedisTemplate 和 StringRedisTemplate
```
@Autowired
RedisTemplate redisTemplate;
// 继承自 RedisTemplate
@Autowired
StringRedisTemplate stringRedisTemplate;
```
- **StringRedisTemplate 主要是用来操作字符串的**
- **RedisTemplate 主要是用来操作对象的**
在 RedisTemplate 中,提供了一下方法来操作数据,分别对应5中基本数据类型

举例:
```
stringRedisTemplate.opsForValue().set("key", "value");
User user = new User("林凯", 19); // User 需要实现 Serializable 接口
redisTemplate.opsForValue().set("user1", user);
```
- **发现问题:RedisTemplate 插入的数据是一堆看不懂的字符**
- **原因是在 RedisTemplate 中,默认使用的是 JDK 的序列化器。**

- **我们可以自定义一个序列化器或者直接将对象转换成为 JSON 格式字符串。**
#####(5)自定义 Redis 配置类
### Redis整合SpringBoot实现缓存(重点)
#### 实现原理
引入Redis之后,RedisCacheConfiguration 会先被加载,创建 CacheManage 放入容器,等到 SimpleCacheConfiguration 加载的时候,检测到已经有了 CacheManage,就不会创建了。

- **所以此时使用的 CacheManager 就是 RedisCacheManager**
- **创建的具体缓存组件就是 RedisCache**
- **RedisCache存储对象时,用的是 RedisTemplate,使用的默认序列化机制是JDK的序列化机制(可以看一下源码)**
而这样就导致存储对象会生成一堆看不懂的字符,**所以我们需要自定义 CacheManager,让SpringBoot使用我们自己的 CacheManage**
#### 整合流程
讲完原理之后来讲解详细的整合流程
#####(1)导入对应的依赖
```
<!-- Redis 缓存-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
```
#####(2)配置 Redis
```
springboot:
redis:
port: 6379 # 端口号
host: "39.98.86.223" # 服务器地址
database: 0 # 默认数据库
password: 666 # 密码
```
SpringBoot配置多数据源,MySQL,Redis,ES
- 2020-04-19
- 197
- SpringBoot
今天量简单的谈谈SpringBoot如何配置多数据源,即MySQL实现基本的查询,Redis用来做缓存,ElasticSearch实现全文检索
### 多数据源概念
多数据源分为以下2中情况
- 多数据源实现数据库读写分离,读操作都去从库里读,写操作都往主库里写。那么这里主库和从库就是两个不同的数据源。
- 一个项目中使用多个数据库,在多个数据库中实现数据转换,也属于多数据源
本文的情况属于使用多个数据库。