SpringBoot基础架构篇3(Redis)
show me the code and talk to me,做的出来更要说的明白
我是布尔bl,你的支持是我分享的动力!
1 引入
数据库达到瓶颈,有什么解决方法。 Redis 可以很好解决这个问题。那让我们来学习如何在 SpringBoot 使用 Redis。
2 确保 redis 开启
安装步骤省略。。。具体可以参考网上教程。
2.1 测试
telnet IP地址 端口(默认6379)
2.2 开启方法
如果上面方法没有返回,需要手动开启
- 找到 redis.conf 文件,配置允许访问的ip
find / -name redis.conf
- 打开 redis.conf
找到 bind 127.0.0.1
改为 #bind 127.0.0.1
找到 protected-mode yes
改为 protected-mode no(redis3.2版本以后)
找到daemonize yes
改为 daemonize no
3.保存退出
:wq
4 . 设置本地防火墙
如果有防火墙: iptables(Linux上常用的防火墙软件)
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
service iptables save #保存iptables规则
5 . 阿里云云主机
如果redis放在了阿里云,需要添加安全组规则,自行百度
- 最后测试
telnet IP地址 端口(默认6379)
成功得到返回
3 redis 作用
我们知道 redis 可以辅助 mysql,那我们应该怎样使用这个辅助呢?我这里说的是常见的情况。当我们的数据库达到瓶颈了,这个是前提。同时是读多于写的情况,我们就可以使用 redis 了。
如今前后端交互通过 JSON 交流。基于这点,我们一般把数据转成 json ,然后再转成字符的数据格式存在 redis 里面。这里 json 是不能直接存在 redis 里面的。 因为 redis 没有 json 的数据结构。
当我们取出数据的时候,数据是一堆 json 的字符串,因此我们需要将数据转成对象,然后通 过springboot 转成 json 。
4 redis常用命令
redis 有五种数据结构
- String 字符串
- List 集合
- Set 集合
- Hash 集合
- SortedSet 集合
常见的 String 字符串使用(增查改删)
set a 'a'
get a
set a 'b'
del a
4 搭建环境
4.1 项目结构
├─java
│ └─com
│ └─example
│ └─lsbredistest
│ └─controller
│ └─entity
└─resources
├─static
└─templates
4.2 application.yml
首先我们需要配置 redis 连接的用户名密码
### redis 缓存配置
spring:
redis:
database: 0
host: ip
port: 6379
password: 123456
4.3 RedisController
核心代码
@RestController
@RequestMapping("/lsbredis")
public class RedisController {
@Resource
private StringRedisTemplate stringRedisTemplate;
@RequestMapping("/test")
public void test(){
// key : a value: a
// 增
stringRedisTemplate.opsForValue().set("a","a");
// 查
String a = stringRedisTemplate.opsForValue().get("a");
System.out.println("a的值:"+a);
// 改
stringRedisTemplate.opsForValue().set("a","b");
// 缓存一个对象
List<User> list = new ArrayList<>();
list.add(new User(1l, "c1",1, "s1"));
list.add(new User(2l, "c2",2, "s2"));
list.add(new User(3l, "c3",3, "s3"));
Gson gson = new Gson();
String toJson = gson.toJson(list);
stringRedisTemplate.opsForValue().set("user",toJson);
}
}
注入配置
不知有没有发现我们没有配置 redis 的注入。究竟 redis 的如何自动注入的?通过查找代码,我们可以发现 redis 已经通过 Springboot 自己在内部设置了。
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
上面的代码就是 Redis 的注入配置。省去了我们再去编写代码。赞!
5 源码
https://github.com/buerbl/learnSpringboot/tree/master/lsb-redistest
6 深入一层
redis 缓存可以减轻数据库压力,有什么方法可以减轻 redis 压力呢?
答案是当然有。我们可以使用 Guava做本地缓存,减轻 redis 压力,同时加快反问速度。
当然加本地缓存也情况。单机环境下,加本地缓存比较简单,但是分布式环境下,加本地缓存,当我们的缓存更新的时候,我们需要额外处理其他机器的本地缓存,不然数据就一致了。我们利用 redis的pub/sub 机制,对其他机器的本地缓存进行删除。
关注微信公众号,随时移动端阅读
)
SpringBoot基础架构篇3(Redis)的更多相关文章
- SpringBoot基础架构篇1(SpringBoot、MyBatis-Plus与Thymeleaf)
show me the code and talk to me,做的出来更要说的明白 我是布尔bl,你的支持是我分享的动力! 1 引入 使用 MyBatis-Plus 以及 thymeleaf 实现增 ...
- hadoop之yarn详解(基础架构篇)
本文主要从yarn的基础架构和yarn的作业执行流程进行阐述 一.yarn的概述 Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管 ...
- 基于SpringBoot搭建应用开发框架(一) —— 基础架构
目录 Spring的简史 零.开发技术简介 一.创建项目 1.创建工程 2.创建Starter 3.启动项目 4.Spring Boot 配置 5.项目结构划分 二.基础结构功能 1.web支持 2. ...
- 使用Spring Boot搭建应用开发框架(一) —— 基础架构
Spring的简史 第一阶段:XML配置,在Spring1.x时代,使用Spring开发满眼都是xml配置的Bean,随着项目的扩大,我们需要把xml配置文件分放到不同的配置文件里,那时候需要频繁的在 ...
- b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释
继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更新页面显示状态这种方式在运作的,从若干年前简单的ajax流行起来 ...
- 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)
[SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...
- (二)SpringBoot基础篇- 静态资源的访问及Thymeleaf模板引擎的使用
一.描述 在应用系统开发的过程中,不可避免的需要使用静态资源(浏览器看的懂,他可以有变量,例:HTML页面,css样式文件,文本,属性文件,图片等): 并且SpringBoot内置了Thymeleaf ...
- 视频作品《springboot基础篇》上线了
1.场景描述 第一个视频作品出炉了,<springboot基础篇>上线了,有需要的朋友可以直接点击链接观看.(如需购买,请通过本文链接购买) 2. 课程内容 课程地址:https://ed ...
- Redis面试热点工程架构篇之数据同步
温馨提示 更佳阅读体验:[决战西二旗]|Redis面试热点之工程架构篇[2] 前言 前面用了3篇文章介绍了一些底层实现和工程架构相关的问题,鉴于Redis的热点问题还是比较多的,因此今天继续来看工程架 ...
随机推荐
- H3C RARP
- [转]来自后端的逆袭 blazor简介 全栈的福音
背景 什么是SPA 什么是MPA MPA (Multi-page Application) 多页面应用指的就是最传统的 HTML 网页设计,早期的网站都是这样的设计,所之称为「网页设计」.使用 MPA ...
- Element节点输出到System.out
protected void writeElementToFile(Element valrespEle) { try { TransformerFactory transformerFactory ...
- SpringBoot+Thyemleaf开发环境正常,打包jar发到服务器就报错Template might not exist or might not be accessible
网上查看了各种解决的思路,总结如下: 1. 在controller层请求处理完了返回时,没有使用@RestController或@ResponseBody而返回了非json格式 这种情况下返回的数据t ...
- git update-index --assume-unchanged
有的时候,不小心提交了一个配置文件config.php,每次在本地开发测试之后,都需要更改配置文件.相当麻烦. 使用 git update-index --assume-unchanged /pa ...
- P1023 活动安排
题目描述 某个人可以在n个活动中选择一些出来参加.每个活动都有起止时间.而且每个时间段只能参加一个活动.问,这个人最多能加参加几个活动. 可以在活动结束时,立即开始新的活动. 输入格式 第一行是一个整 ...
- P1022 绵羊排序
题目描述 聪聪想要给他家农场里的 \(n\) 只绵羊按照品质从高到低进行排序. 农场里的 \(n\) 只绵羊编号从 \(1\) 到 \(n\) ,第 \(i\) 只绵羊的体重为 \(w_i\) ,高度 ...
- FreeSql取多表数据
该篇内容由个人博客点击跳转同步更新!转载请注明出处! 以文章随笔与分类为例. 表结构 部分字段如下,其他省略,为了展示一对多关联,一个分类下可以有多个文章.一个文章属于一个分类. blog_artic ...
- 将 using namespace 写在函数体中,以避免命名空间冲突
将 using namespace xxx 写在函数体中时, 命名空间 xxx 中定义的资源只在该函数体中有效. 测试代码如下图所示(namespace std 只在函数 testFun2 中有效):
- Servlet学习笔记(一)
使用Servlet所需要导入的包: java.io.*; javax.servlet.*; ...