Fork me on GitHub

JackLin的博客

当前位置:首页 > 标签

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 1

Linux服务器安装Redis(Docker安装,解压缩包安装)

  • 2020-04-28
  • 144
  • Redis
前不久 Redis 远程连接失败,又重装了几遍 Redis(后来发现时端口没开放的原因......),特此记录一下。 今天主要讲解 2 中 Redis 的安装方式,一种是利用 Docker 安装,另一种是解压缩包安装。 ### 利用 Docker 安装 Redis ##### (1) 首先来到 Docker Hub 官网 进入官网之后,搜索 Redis,然后可以看到如下图所示 ![](/upload/2020-4-28 152622.png) 由于我们之前配置过阿里云的镜像,所以这里 docker pull redis 就行了 #####(2)服务器上安装 Redis 连接服务器,首先查看已有的镜像 `docker images` ![](/upload/2020-4-28 152858.png) 然后执行 `docker pull redis`,稍作等待即可,之后再查看已有的镜像,发现多了一个 Redis 的镜像,说明安装成功。 ![](/upload/2020-4-28 153032.png) #####(3)启动 Redis - -d 代表后台运行 - -p 代表端口映射 - --name 给我们的容器起一个名字 - 最后面填写需要启动的镜像的名字 ![](/upload/2020-4-28 153334.png) **当然,这里也可以指定本地配置文件启动,这里没有展示** --- > 关于设置密码(可以通过命令设置,或者通过配置文件设置) ![](/upload/2020-4-28 155311.png) ![](/upload/2020-4-28 153334.png) #####(4)本地连接测试 查看容器状态并测试 ![](/upload/2020-4-28 153650.png) #####(5)远程连接测试 启动 Redis Desktop Manager,连接并输入密码 ![](/upload/2020-4-28 153907.png)

Redis远程连接失败,采坑记录!

  • 2020-04-28
  • 154
  • Redis
使用 Redis DeskTop Manager 远程连接失败,如下图所示: ![](/upload/2020-4-28 002034.png) #### 阿里云服务器防火墙 一开始怀疑是阿里云服务器的防火墙问题(**呵呵,事情要是有这么简单就好了**),但是开放防火墙端口之后依然保持,然后想到了配置文件的问题。 #### Redis配置文件 检查了我的配置文件,发现 `bind 127.0.0.1` 已经注释了,保护模式 `protected-mode no` 也已经是改为了no,可是还是报错连接不上。 **又经过详细的检查,确定配置文件和阿里云服务器防火墙都没有问题之后。突然想到会不会是我的服务器端口没开啊?** #### 检测服务器端口 6379 是否开放 ``` firewall-cmd --query-port=6379/tcp ``` 结果显示----》 ![](/upload/2020-4-28 002637.png) 我裂开了。。。。居然还真的是端口没开 那好办了,开放端口即可 ``` firewall-cmd --add-port=6379/tcp ``` 再次连接,连接成功(记得要重启 Redis 噢) ![](/upload/2020-4-28 003541.png) #### 总结,需要注意的事项 #####(1)确保阿里云服务器的防火墙放行 6379 端口 ![](/upload/2020-4-28 004228.png) #####(2)确保自己的服务器开启 6379 端口,需要返回 yes ![](/upload/2020-4-28 003952.png) #####(3)检查配置文件 - 注释掉 bind 127.0.0.1(不注释的话就只能本机连接) - 保护模式默认是开启的,需要关闭,即修改为 `protected-mode no` - 同时启动时还有改为守护进程启动(后台启动)`daemonize yes` ![](/upload/2020-4-28 004557.png)

Redis整合SpringBoot实现缓存

  • 2020-04-26
  • 132
  • 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 已经说得特别明白了 ![](/upload/2020-4-26 153815.png) - **告诉我们在 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 在官网上我们看到了这个: ![](/upload/2020-4-26 154606.png) 那好办了,直接导入依赖即可。 #####(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` 看看 ![](/upload/2020-4-26_160004.png) 之后我们又发现,这个 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中基本数据类型 ![](/upload/2020-4-26 161327.png) 举例: ``` stringRedisTemplate.opsForValue().set("key", "value"); User user = new User("林凯", 19); // User 需要实现 Serializable 接口 redisTemplate.opsForValue().set("user1", user); ``` - **发现问题:RedisTemplate 插入的数据是一堆看不懂的字符** - **原因是在 RedisTemplate 中,默认使用的是 JDK 的序列化器。** ![](/upload/2020 4-26 163306.png) - **我们可以自定义一个序列化器或者直接将对象转换成为 JSON 格式字符串。** #####(5)自定义 Redis 配置类 ### Redis整合SpringBoot实现缓存(重点) #### 实现原理 引入Redis之后,RedisCacheConfiguration 会先被加载,创建 CacheManage 放入容器,等到 SimpleCacheConfiguration 加载的时候,检测到已经有了 CacheManage,就不会创建了。 ![](/upload/2020-4-26 170320.png) - **所以此时使用的 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
  • 137
  • SpringBoot
今天量简单的谈谈SpringBoot如何配置多数据源,即MySQL实现基本的查询,Redis用来做缓存,ElasticSearch实现全文检索 ### 多数据源概念 多数据源分为以下2中情况 - 多数据源实现数据库读写分离,读操作都去从库里读,写操作都往主库里写。那么这里主库和从库就是两个不同的数据源。 - 一个项目中使用多个数据库,在多个数据库中实现数据转换,也属于多数据源 本文的情况属于使用多个数据库。