【spring boot】SpringBoot初学(8)– 简单整合redis
前言
到目前为止,把项目中需要用到的:properties读取、数据源配置、整合mybatis/JdbcTemplate、AOP、WebService、redis、filter、interceptor、定时器等,都简单的去用spring boot整合学习了一下。与学习之初对spring boot的理解并没有什么大的区别,只是大致知道怎么配置/注入想要的。
一、准备
1.1 redis服务端的下载及安装
1.2 redis需要的jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
1.3 redis的应用场景
自己知道理解的就2个场景:1、缓存; 2、构建消息队列。 (参考:Redis作者谈Redis应用场景)
二、demo
2.1 redis的可用配置
# REDIS (RedisProperties)
spring.redis.cluster.max-redirects= # Maximum number of redirects to follow when executing commands across the cluster.
spring.redis.cluster.nodes= # Comma-separated list of "host:port" pairs to bootstrap from.
spring.redis.database=0 # Database index used by the connection factory.
spring.redis.url= # Connection URL, will override host, port and password (user will be ignored), e.g. redis://user:password@example.com:6379
spring.redis.host=localhost # Redis server host.
spring.redis.password= # Login password of the redis server.
spring.redis.ssl=false # Enable SSL support.
spring.redis.pool.max-active=8 # Max number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.
spring.redis.pool.max-idle=8 # Max number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections.
spring.redis.pool.max-wait=-1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
spring.redis.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.
spring.redis.port=6379 # Redis server port.
spring.redis.sentinel.master= # Name of Redis server.
spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs.
spring.redis.timeout=0 # Connection timeout in milliseconds.
2.2 StringRedisTemplate的注入
与JdbcTemplate一样,在spring boot中注入StringRedisTemplate是相当简单的事。这也是使用redis的核心之一。
如果,不指定配置RedisConnectionFactory,默认情况下将尝试使用localhost:6379连接Redis服务器。
@SpringBootApplication
@EnableCaching //允许缓存 (此demo允许redis缓存)
public class RedisApplication {
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
} public static void main(String[] args) {
SpringApplication.run(RedisApplication.class, args);
}
}
2,3 controller模拟
@Controller
public class RedisController {
private static final String STR_REDIS_KEY = "vergil"; @Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private RedisCacheDao cacheDao; @GetMapping("/redis")
public String index() {
return "redis/redis_index";
} @PostMapping("/setString")
@ResponseBody
public Map<String, Object> setString(String value) {
redisTemplate.opsForValue().set(STR_REDIS_KEY, value);
Map<String, Object> map = new HashMap<String, Object>();
map.put("msg", "ok");
return map;
} @PostMapping("/getString")
@ResponseBody
public Map<String, Object> getString() {
String value = redisTemplate.opsForValue().get(STR_REDIS_KEY);
Map<String, Object> map = new HashMap<String, Object>();
map.put("value", value);
map.put("msg", "ok");
return map;
} @PostMapping("/getCache")
@ResponseBody
public RedisCacheBean get(@RequestParam String id) {
return cacheDao.get(id);
}
}
2.4 view页面效果
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="./static/common/jquery-2.1.4.js"></script>
<title>spring boot redis</title>
<script type="text/javascript"> /*<![CDATA[*/
function setString() {
$.ajax({
type : 'POST',
url : '/setString',
data : {"value":$("#value").val()},
success : function(r) {
alert(r.msg);
},
error : function() {
alert('error!')
}
});
} function getString() {
$.ajax({
type : 'POST',
contentType : 'application/json',
url : '/getString',
success : function(r) {
alert(r.msg);
$("#result").text(JSON.stringify(r));
},
error : function() {
alert('error!')
}
});
}
function getCache() {
$.ajax({
type : 'POST',
contentType : 'application/json',
url : '/getCache?id='+$("#cacheId").val(),
success : function(r) {
$("#cacheResult").text(JSON.stringify(r));
},
error : function() {
alert('error!')
}
});
}
/*]]>*/
</script>
</head>
<body>
<h4>base redis</h4>
<input type="text" id="value" />
<input type="button" value="设置" onclick="setString()" /><br/>
<input type="button" value="获取" onclick="getString()" /><br/>
<h5>结果:</h5>
<p id="result"></p>
<br /> <h4>redis cache</h4>
<input type="text" id="cacheId" /><br/>
<input type="button" value="获取缓存" onclick="getCache()" /><br/>
<h5>缓存结果:</h5>
<p id="cacheResult"></p>
</body>
</html>
效果:
1、当点击"设置",把输入值保存到redis缓存。
2、当点击"获取",从redis中获取到1中设置的值。
(简单理解就是java中的map)
2.5 redis开启缓存模式
1、如果是缓存模式,那么必须在*Application中加入注解:@EnableCaching。
2、@Cacheable注解可以用在方法或者类级别。当他应用于方法级别的时候,就是如上所说的缓存返回值。当应用在类级别的时候,这个类的所有方法的返回值都将被缓存。
(注:@Cacheable是spring提供的,并不是redis。详细用处及细节可另看。)
@Repository
public class RedisCacheDao { /**
* 模拟从数据库获取的数据
*/
@Cacheable(value = "redisCacheBean", key = "'.id.'+#id")
public RedisCacheBean get(String id) {
RedisCacheBean redisCacheBean = new RedisCacheBean(id, "name_"+id, new Date(), id.length() * 10);
return redisCacheBean;
}
}
public class RedisCacheBean implements Serializable{
private static final long serialVersionUID = 1L;
public String id;
public String name;
public String date;
public int quantity;
public RedisCacheBean(String id, String name, Date date, int quantity) {
super();
this.id = id;
this.name = name;
this.date = new SimpleDateFormat("yyyy-MM-dd HH:mm:sss").format(date);
this.quantity = quantity;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
RedisCacheBean.java
三、题外话
简单整合redis就这么点东西,没任何别的有深度的东西。所以spring boot的“约定优于配置”,简化了相当多的项目构建。
另外,不光redis包括其他的java开源jar。如果你只是写一个demo,写一个“Hello World”真的不要太简单。就像用excel一样,上手会用很简单,但真要精通灵活相当之复杂。
所以,如果有毅力、兴趣、时间,还是应该深入看一下,不要只在表面用、写业务逻辑代码。看看那些好的jar是怎么实现的。
(其实最近都是强迫自己写博客,但写完一看没任何东西,无奈...各种烦心事...)
【spring boot】SpringBoot初学(8)– 简单整合redis的更多相关文章
- Spring Boot(十三):整合Redis哨兵,集群模式实践
前面的两篇文章(Redis的持久化方案, 一文掌握Redis的三种集群方案)分别介绍了Redis的持久化与集群方案 -- 包括主从复制模式.哨兵模式.Cluster模式,其中主从复制模式由于不能自动做 ...
- SpringBoot简单整合redis
Jedis和Lettuce Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server. Jedis在实现上是直接连接的redis serve ...
- Spring Boot 2.x 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统
一.概述 经过HelloWorld示例(Spring Boot 2.x 快速入门(上)HelloWorld示例)( Spring Boot 2.x 快速入门(下)HelloWorld示例详解)两篇的学 ...
- Spring Boot 2.0 快速集成整合消息中间件 Kafka
欢迎关注个人微信公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site ...
- spring boot: @Entity @Repository一个简单的数据读存储读取
spring boot: @Entity @Repository一个简单的数据读存储读取 创建了一个实体类. 如何持久化呢?1.使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中 ...
- 实例讲解Springboot以Template方式整合Redis及序列化问题
1 简介 之前讲过如何通过Docker安装Redis,也讲了Springboot以Repository方式整合Redis,建议阅读后再看本文效果更佳: (1) Docker安装Redis并介绍漂亮的可 ...
- 解决Spring Boot(2.1.3.RELEASE)整合spring-data-elasticsearch3.1.5.RELEASE报NoNodeAvailableException[None of the configured nodes are available
Spring Boot(2.1.3.RELEASE)整合spring-data-elasticsearch3.1.5.RELEASE报NoNodeAvailableException[None of ...
- Spring Boot 支持 HTTPS 如此简单,So easy!
这里讲的是 Spring Boot 内嵌式 Server 打 jar 包运行的方式,打 WAR 包部署的就不存在要 Spring Boot 支持 HTTPS 了,需要去外部对应的 Server 配置. ...
- Spring Boot 支持 HTTPS 如此简单,So easy!
这里讲的是 Spring Boot 内嵌式 Server 打 jar 包运行的方式,打 WAR 包部署的就不存在要 Spring Boot 支持 HTTPS 了,需要去外部对应的 Server 配置. ...
随机推荐
- 编译调试 .NET Core 5.0 Preview 并分析 Span 的实现原理
很久没有写过 .NET Core 相关的文章了,目前关店在家休息所以有些时间写一篇新的
- 图像GIST特征和LMGIST包的python实现(有github)
1什么是Gist特征 (1) 一种宏观意义的场景特征描述 (2) 只识别"大街上有一些行人"这个场景,无需知道图像中在那些位置有多少人,或者有其他什么对 ...
- JSP&Servlet学习笔记----第5章
Servlet进阶API 每个Servlet都必须由web容器读取Servlet设置信息(标注或者web.xml).初始化. 对于每个Servlet的设置信息,web容器会为其生成一个ServletC ...
- java设计模式3——建造者模式
java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...
- POJ_2185_二维KMP
http://poj.org/problem?id=2185 求最小覆盖矩阵,把KMP扩展到二维,行一次,列一次,取最小覆盖线段相乘即可. #include<iostream> #incl ...
- ARTS Week 3
Nov 11,2019 ~ Nov 17,2019 Algorithm 本周来介绍快速求一个数字n次方的余数. 理论基础 我们先定义运算$ x \bmod p = r \(与\) x \equiv r ...
- Grafana & Graphite & Collectd:监控系统
简介 监控是运维工作中的一个重要组成部分,今天介绍一套新的监控工具,方便好用,扩展性强,这套工具有三个组件,Grafana & Graphite & Collectd: Grafana ...
- 7天用Go动手写/从零实现分布式缓存GeeCache
1 谈谈分布式缓存 第一次请求时将一些耗时操作的结果暂存,以后遇到相同的请求,直接返回暂存的数据.我想这是大部分童鞋对于缓存的理解.在计算机系统中,缓存无处不在,比如我们访问一个网页,网页和引用的 J ...
- 开源APM系统 HttpReports 在 .Net Core的应用
前言 简单说明下,APM全称Application Performance Management应用性能管理,通过各种收集请求数据,同时搭配Dashboard以实现对应用程序性能管理和故障管理的系统化 ...
- 文件共享服务之Samba
一.Samba服务概述 在Windows网络环境中.机之间进行文件打印和共享是通过微软自己的SMB/CIFS协议来实现的.SMB(服务消息块)和CIFS(通用互联网文件系统)这两个都是微软的私有协议 ...