设为首页 收藏本站
查看: 1501|回复: 0

[经验分享] 玩转spring boot

[复制链接]

尚未签到

发表于 2017-12-21 23:03:21 | 显示全部楼层 |阅读模式
  前言
  Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。使用redis有两种场景:1.缓存。2.高热数据存储(无非还是缓存),弥补关系型数据库的不足。
  一、准备工作
  下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases
DSC0000.png

  运行redis-server.exe程序
DSC0001.png

DSC0002.png

  出现黑色窗口表示redis服务已启动。
  二、与spring boot结合
  参考官方例子:http://spring.io/guides/gs/messaging-redis/
  修改pom.xml:

DSC0003.gif DSC0004.gif   

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
<modelVersion>4.0.0</modelVersion>
  

  
<groupId>com.github.carter659</groupId>
  
<artifactId>spring08</artifactId>
  
<version>0.0.1-SNAPSHOT</version>
  
<packaging>jar</packaging>
  

  
<parent>
  
<groupId>org.springframework.boot</groupId>
  
<artifactId>spring-boot-starter-parent</artifactId>
  
<version>1.4.2.RELEASE</version>
  
</parent>
  

  

  
<name>spring08</name>
  
<url>http://maven.apache.org</url>
  

  
<properties>
  
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  
<java.version>1.8</java.version>
  
</properties>
  

  
<dependencies>
  
<dependency>
  
<groupId>org.springframework.boot</groupId>
  
<artifactId>spring-boot-starter</artifactId>
  
</dependency>
  
<dependency>
  
<groupId>org.springframework.boot</groupId>
  
<artifactId>spring-boot-starter-redis</artifactId>
  
</dependency>
  
<dependency>
  
<groupId>org.springframework.boot</groupId>
  
<artifactId>spring-boot-starter-thymeleaf</artifactId>
  
</dependency>
  
<dependency>
  
<groupId>org.springframework.boot</groupId>
  
<artifactId>spring-boot-devtools</artifactId>
  
<optional>true</optional>
  
</dependency>
  
</dependencies>
  

  
<build>
  
<plugins>
  
<plugin>
  
<groupId>org.springframework.boot</groupId>
  
<artifactId>spring-boot-maven-plugin</artifactId>
  
</plugin>
  
</plugins>
  
</build>
  
</project>
  


pom.xml  修改入口类文件“App.java”:

  

package com.github.carter659.spring08;  

  

import org.springframework.boot.SpringApplication;  

import org.springframework.boot.autoconfigure.SpringBootApplication;  

import org.springframework.context.annotation.Bean;  

import org.springframework.data.redis.connection.RedisConnectionFactory;  

import org.springframework.data.redis.core.StringRedisTemplate;  

  

/**  
* 博客出处:
http://www.cnblogs.com/GoodHelper/  
*
@author 刘冬  
*
  

*/  
@SpringBootApplication
  

public>
  

public static void main(String[] args) {  
SpringApplication.run(App.
class, args);  
}
  

  
@Bean
  
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
  

return new StringRedisTemplate(connectionFactory);  
}
  
}
  


App.java  添加控制器“MainController.java”文件:

  

package com.github.carter659.spring08;  

  

import java.util.HashMap;  

import java.util.Map;  

  

import org.springframework.beans.factory.annotation.Autowired;  

import org.springframework.data.redis.core.StringRedisTemplate;  

import org.springframework.stereotype.Controller;  

import org.springframework.web.bind.annotation.GetMapping;  

import org.springframework.web.bind.annotation.PostMapping;  

import org.springframework.web.bind.annotation.ResponseBody;  

  

/**  
* 博客出处:
http://www.cnblogs.com/GoodHelper/  
*
  
*
@author 刘冬  
*
  

*/  
@Controller
  

public>
  

private static final String STR_REDIS_KEY = "key:name";  

  
@Autowired
  

private StringRedisTemplate redisTemplate;  

  
@GetMapping(
"/")  

public String index() {  

return "index";  
}
  

  
@PostMapping(
"/setString")  

public @ResponseBody Map<String, Object> setString(String value) {  
redisTemplate.opsForValue().set(STR_REDIS_KEY, value);
  
Map
<String, Object> map = new HashMap<>();  
map.put(
"msg", "ok");  

return map;  
}
  

  
@PostMapping(
"/getString")  

public @ResponseBody Map<String, Object> getString() {  
String value
= redisTemplate.opsForValue().get(STR_REDIS_KEY);  
Map
<String, Object> map = new HashMap<>();  
map.put(
"value", value);  
map.put(
"msg", "ok");  

return map;  
}
  

  
}
  


MainController.java  新建模板src/main/resources/templates/index.html:

  

<!DOCTYPE html>  
<html xmlns:th="http://www.thymeleaf.org">
  
<head>
  
<meta http-equiv="Content-Type" content="text/html; " />
  
<title>玩转spring boot——结合redis</title>
  
<script src="//cdn.bootcss.com/angular.js/1.5.6/angular.min.js"></script>
  
<script type="text/javascript">
  
/*<![CDATA[*/
  
var app = angular.module('app', []);
  
app.controller('MainController', function($rootScope, $scope, $http) {
  

  
$scope.value = '刘冬';
  

  
//保存
  
        $scope.setString = function() {
  
$http({
  
url : '/setString?value=' + $scope.value,
  
method : 'POST'
  
});
  
}
  

  
$scope.getString = function() {
  
$http({
  
url : '/getString',
  
method : 'POST'
  
}).success(function(r) {
  
$scope.result = JSON.stringify(r)
  
});
  
}
  
});
  

  
/*]]>*/
  
</script>
  
</head>
  
<body ng-app="app" ng-controller="MainController">
  
<h1>玩转spring boot——结合redis</h1>
  
<h4>
  
<a href="http://www.cnblogs.com/GoodHelper/">from 刘冬的博客</a>
  
</h4>
  
<input type="text" ng-model="value" />
  
<input type="button" value="设置" ng-click="setString()" />
  

  
<br />
  
<br />
  
<input type="button" value="获取" ng-click="getString()" />
  
<br />
  
<h3>结果:</h3>
  
<p>{{result}}</p>
  

  

  
<br />
  
<a href="http://www.cnblogs.com/GoodHelper/">点击访问原版博客</a>
  
</body>
  
</html>
  


index.html  运行效果:
DSC0005.png

  点击获取,提示未空,再设置:
DSC0006.gif

  与redis的简单结合就实现了。
  三、redis缓存集成
  添加“Order.java”类文件:

  

package com.github.carter659.spring08;  

  
import java.io.Serializable;
  
import java.util.Date;
  

  
/**
  
* 博客出处:http://www.cnblogs.com/GoodHelper/
  
*
  
* @author 刘冬
  
*
  
*/
  
public>  

  
/**
  
*
  
*/
  
private static final long serialVersionUID = 1L;
  

  
public String>  

  
public String no;
  

  
public Date date;
  

  
public int quantity;
  

  
/**
  
* 省略 get set
  
*/
  
}
  


Order  注意,一定要实现“Serializable”接口。
  新建“OrderDao.java”类文件:


  

package com.github.carter659.spring08;  

  

import java.util.Date;  

  

import org.springframework.cache.annotation.Cacheable;  

import org.springframework.stereotype.Component;  

  

/**  
* 博客出处:
http://www.cnblogs.com/GoodHelper/  
*
  
*
@author 刘冬  
*
  

*/  
@Component
  

public>

  

/**  
* 假设从数据库获取的订单数据
  
*
  
*
@param>
* @return  
*/
  
@Cacheable(value = "order", key = "'.id.'+#id")
  
public Order get(String>  
Order order = new Order();
  
order.id =>  
order.no = "No.00001";
  
order.date = new Date();
  
order.quantity = 100;
  
return order;
  
}
  
}
  


OrderDao.java  在方法“public Order get(String>  此方法模拟数据库的查询,如果是第一次查询,返回当前时间(new Date())。如果在缓存中查询,则时间是之前的。
  控制器“MainController.java”增加“orderDao”字段和“get”方法:
  

@Autowired  

private OrderDao orderDao;  

  

@PostMapping("/get")  

public @ResponseBody Order get(@RequestParam String>

return orderDao.get(id);  
}
  

  在App类中加入启动缓存的注解“@EnableCaching”:
  

package com.github.carter659.spring08;  

  

import org.springframework.boot.SpringApplication;  

import org.springframework.boot.autoconfigure.SpringBootApplication;  

import org.springframework.cache.annotation.EnableCaching;  

import org.springframework.context.annotation.Bean;  

import org.springframework.data.redis.connection.RedisConnectionFactory;  

import org.springframework.data.redis.core.StringRedisTemplate;  

  

/**  
* 博客出处:
http://www.cnblogs.com/GoodHelper/  
*
  
*
@author 刘冬  
*
  

*/  
@SpringBootApplication
  
@EnableCaching
  

public>

  

public static void main(String[] args) {  
SpringApplication.run(App.
class, args);  
}
  

  
@Bean
  
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
  

return new StringRedisTemplate(connectionFactory);  
}
  
}
  

DSC0007.png

  修改之前的index.html文件


  

<!DOCTYPE html>  
<html xmlns:th="http://www.thymeleaf.org">
  
<head>
  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  
<title>玩转spring boot——结合redis</title>
  
<script src="//cdn.bootcss.com/angular.js/1.5.6/angular.min.js"></script>
  
<script type="text/javascript">
  
/*<![CDATA[*/
  
var app = angular.module('app', []);
  
app.controller('MainController', function($rootScope, $scope, $http) {
  

  
$scope.value = '刘冬';
  
$scope.id = '123456';
  

  
//保存
  
        $scope.setString = function() {
  
$http({
  
url : '/setString?value=' + $scope.value,
  
method : 'POST'
  
});
  
}
  

  
$scope.getString = function() {
  
$http({
  
url : '/getString',
  
method : 'POST'
  
}).success(function(r) {
  
$scope.result = JSON.stringify(r)
  
});
  
}
  
$scope.getOrder = function() {
  
$http({
  
url : '/get?id=' + $scope.id,
  
method : 'POST'
  
}).success(function(r) {
  
$scope.result = JSON.stringify(r)
  
});
  
}
  
});
  

  
/*]]>*/
  
</script>
  
</head>
  
<body ng-app="app" ng-controller="MainController">
  
<h1>玩转spring boot——结合redis</h1>
  
<h4>
  
<a href="http://www.cnblogs.com/GoodHelper/">from 刘冬的博客</a>
  
</h4>
  
<input type="text" ng-model="value" />
  
<input type="button" value="设置" ng-click="setString()" />
  

  
<br />
  
<br />
  
<input type="button" value="获取" ng-click="getString()" />
  
<br />
  
<br />
  
<input type="text" ng-model="id" />
  
<br />
  
<input type="button" value="获取订单" ng-click="getOrder()" />
  
<br />
  
<br />
  
<h3>结果:</h3>
  
<p>{{result}}</p>
  

  

  
<br />
  
<a href="http://www.cnblogs.com/GoodHelper/">点击访问原版博客</a>
  
</body>
  
</html>
  


index.html  运行效果:
DSC0008.gif

  第一遍查询生成当前时间,之后再查询则时间不变
  代码:https://github.com/carter659/spring-boot-08.git
DSC0009.png

  如果你觉得我的博客对你有帮助,可以给我点儿打赏,左侧微信,右侧支付宝。
  有可能就是你的一点打赏会让我的博客写的更好:)
  玩转spring boot系列目录

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426648-1-1.html 上篇帖子: openstry lua redis实现负载均衡 下篇帖子: 如何提取Redis中的大KEY
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表