spring boot Redis集成—RedisTemplate

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

Spring boot 基于Spring,  Redis集成与Spring大同小异。

文章示例代码均以前篇笔记为基础增加修改,直接上代码:

pom.xml  Redis相关依赖:

 

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  4.     <modelVersion>4.0.0</modelVersion>  
  5.     <groupId>com.vic</groupId>  
  6.     <artifactId>vic</artifactId>  
  7.     <version>0.1.0</version>  
  8.   
  9.     <properties>  
  10.         <java.version>1.7</java.version>  
  11.     </properties>  
  12.       
  13.     <parent>  
  14.         <groupId>org.springframework.boot</groupId>  
  15.         <artifactId>spring-boot-starter-parent</artifactId>  
  16.         <version>1.3.8.RELEASE</version>  
  17.     </parent>  
  18.   
  19.     <dependencies>  
  20.         <!-- spring boot -->  
  21.         <dependency>  
  22.             <groupId>org.springframework.boot</groupId>  
  23.             <artifactId>spring-boot-starter-web</artifactId>  
  24.         </dependency>  
  25.           
  26.         <!-- mybatis -->  
  27.         <dependency>  
  28.             <groupId>org.springframework.boot</groupId>  
  29.             <artifactId>spring-boot-starter-jdbc</artifactId>  
  30.         </dependency>  
  31.   
  32.         <dependency>  
  33.             <groupId>org.mybatis</groupId>  
  34.             <artifactId>mybatis-spring</artifactId>  
  35.             <version>1.2.2</version>  
  36.         </dependency>  
  37.         <dependency>  
  38.             <groupId>org.mybatis</groupId>  
  39.             <artifactId>mybatis</artifactId>  
  40.             <version>3.2.8</version>  
  41.         </dependency>  
  42.   
  43.         <dependency>  
  44.             <groupId>mysql</groupId>  
  45.             <artifactId>mysql-connector-java</artifactId>  
  46.         </dependency>  
  47.   
  48.         <dependency>  
  49.             <groupId>com.mchange</groupId>  
  50.             <artifactId>c3p0</artifactId>  
  51.             <version>0.9.2.1</version>  
  52.         </dependency>  
  53.           
  54.           
  55.         <!-- redis -->  
  56.         <dependency>  
  57.             <groupId>org.springframework.boot</groupId>  
  58.             <artifactId>spring-boot-starter-redis</artifactId>  
  59.   
  60.         </dependency>  
  61.           
  62.         <!--Gson-->    
  63.         <dependency>    
  64.             <groupId>com.google.code.gson</groupId>    
  65.             <artifactId>gson</artifactId>    
  66.         </dependency>    
  67.           
  68.           
  69.     </dependencies>  
  70.     <build>  
  71.         <plugins>  
  72.             <plugin>  
  73.                 <groupId>org.springframework.boot</groupId>  
  74.                 <artifactId>spring-boot-maven-plugin</artifactId>  
  75.             </plugin>  
  76.         </plugins>  
  77.     </build>  
  78. </project>  

 

 

application.properties增加redis相关属性:

 

 

[plain] view plain copy
  1. #datasource  
  2. spring.datasource.jdbcUrl=jdbc:mysql://115.28.92.178:3306/wms?useUnicode\=true&characterEncoding\=utf8;autoReconnect\=true;maxReconnects\=10;connectTimeout\=180000;socketTimeout\=180000  
  3. spring.datasource.user=root  
  4. spring.datasource.password=xx  
  5. spring.datasource.driverClass=com.mysql.jdbc.Driver  
  6. spring.datasource.maxActive=100  
  7. spring.datasource.initialPoolSize=5  
  8. spring.datasource.minPoolSize=5  
  9. spring.datasource.maxPoolSize=20  
  10. spring.datasource.maxStatements=100  
  11. spring.datasource.maxIdleTime=3600  
  12. spring.datasource.acquireIncrement=2  
  13. spring.datasource.acquireRetryAttempts=10  
  14. spring.datasource.acquireRetryDelay=600  
  15. spring.datasource.testConnectionOnCheckin=true  
  16. spring.datasource.idleConnectionTestPeriod=1200  
  17. spring.datasource.checkoutTimeout=100000  
  18.   
  19.   
  20. #redis  
  21. spring.redis.hostName=115.28.92.178  
  22. spring.redis.port=6379    
  23. spring.redis.password=xxx  
  24. spring.redis.pool.maxActive=8    
  25. spring.redis.pool.maxWait=-1    
  26. spring.redis.pool.maxIdle=8    
  27. spring.redis.pool.minIdle=0    
  28. spring.redis.timeout=0  

 

 

com.vic.config包中新增RedisConfig.java:

 

 

[java] view plain copy
  1. /** 
  2.  *  
  3.  * @author vic 
  4.  * @desc redis config bean 
  5.  * 
  6.  */  
  7. @Configuration  
  8. @EnableAutoConfiguration  
  9. public class RedisConfig {  
  10.   
  11.     private static Logger logger = Logger.getLogger(RedisConfig.class);  
  12.       
  13.     @Bean  
  14.     @ConfigurationProperties(prefix="spring.redis")  
  15.     public JedisPoolConfig getRedisConfig(){  
  16.         JedisPoolConfig config = new JedisPoolConfig();  
  17.         return config;  
  18.     }  
  19.       
  20.     @Bean  
  21.     @ConfigurationProperties(prefix="spring.redis")  
  22.     public JedisConnectionFactory getConnectionFactory(){  
  23.         JedisConnectionFactory factory = new JedisConnectionFactory();  
  24.         JedisPoolConfig config = getRedisConfig();  
  25.         factory.setPoolConfig(config);  
  26.         logger.info("JedisConnectionFactory bean init success.");  
  27.         return factory;  
  28.     }  
  29.       
  30.       
  31.     @Bean  
  32.     public RedisTemplate<?, ?> getRedisTemplate(){  
  33.         RedisTemplate<?,?> template = new StringRedisTemplate(getConnectionFactory());  
  34.         return template;  
  35.     }  
  36. }  

 

 

 

 

 

OK,此时Reddis已经集成完成,下面来对常用操作做一些封装测试:

新增IRedisService接口定义一些常用操作接口,以及添加实现类RedisServiceImpl,代码如下:

 

IRedisService.java

 

[java] view plain copy
  1. /** 
  2.  *  
  3.  * @author vic 
  4.  * @desc redis service 
  5.  */  
  6. public interface IRedisService {  
  7.       
  8.     public boolean set(String key, String value);  
  9.       
  10.     public String get(String key);  
  11.       
  12.     public boolean expire(String key,long expire);  
  13.       
  14.     public <T> boolean setList(String key ,List<T> list);  
  15.       
  16.     public <T> List<T> getList(String key,Class<T> clz);  
  17.       
  18.     public long lpush(String key,Object obj);  
  19.       
  20.     public long rpush(String key,Object obj);  
  21.       
  22.     public String lpop(String key);  
  23.       
  24. }  


RedisServiceImpl.java

 

 

[java] view plain copy
  1. /** 
  2.  *  
  3.  * @author vic 
  4.  * @desc resdis service 
  5.  * 
  6.  */  
  7. @Service  
  8. public class RedisServiceImpl implements IRedisService{  
  9.   
  10.     @Autowired  
  11.     private RedisTemplate<String, ?> redisTemplate;  
  12.       
  13.     @Override  
  14.     public boolean set(final String key, final String value) {  
  15.         boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
  16.             @Override  
  17.             public Boolean doInRedis(RedisConnection connection) throws DataAccessException {  
  18.                 RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
  19.                 connection.set(serializer.serialize(key), serializer.serialize(value));  
  20.                 return true;  
  21.             }  
  22.         });  
  23.         return result;  
  24.     }  
  25.   
  26.     public String get(final String key){  
  27.         String result = redisTemplate.execute(new RedisCallback<String>() {  
  28.             @Override  
  29.             public String doInRedis(RedisConnection connection) throws DataAccessException {  
  30.                 RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
  31.                 byte[] value =  connection.get(serializer.serialize(key));  
  32.                 return serializer.deserialize(value);  
  33.             }  
  34.         });  
  35.         return result;  
  36.     }  
  37.   
  38.     @Override  
  39.     public boolean expire(final String key, long expire) {  
  40.         return redisTemplate.expire(key, expire, TimeUnit.SECONDS);  
  41.     }  
  42.   
  43.     @Override  
  44.     public <T> boolean setList(String key, List<T> list) {  
  45.         String value = JSONUtil.toJson(list);  
  46.         return set(key,value);  
  47.     }  
  48.   
  49.     @Override  
  50.     public <T> List<T> getList(String key,Class<T> clz) {  
  51.         String json = get(key);  
  52.         if(json!=null){  
  53.             List<T> list = JSONUtil.toList(json, clz);  
  54.             return list;  
  55.         }  
  56.         return null;  
  57.     }  
  58.   
  59.     @Override  
  60.     public long lpush(final String key, Object obj) {  
  61.         final String value = JSONUtil.toJson(obj);  
  62.         long result = redisTemplate.execute(new RedisCallback<Long>() {  
  63.             @Override  
  64.             public Long doInRedis(RedisConnection connection) throws DataAccessException {  
  65.                 RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
  66.                 long count = connection.lPush(serializer.serialize(key), serializer.serialize(value));  
  67.                 return count;  
  68.             }  
  69.         });  
  70.         return result;  
  71.     }  
  72.   
  73.     @Override  
  74.     public long rpush(final String key, Object obj) {  
  75.         final String value = JSONUtil.toJson(obj);  
  76.         long result = redisTemplate.execute(new RedisCallback<Long>() {  
  77.             @Override  
  78.             public Long doInRedis(RedisConnection connection) throws DataAccessException {  
  79.                 RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
  80.                 long count = connection.rPush(serializer.serialize(key), serializer.serialize(value));  
  81.                 return count;  
  82.             }  
  83.         });  
  84.         return result;  
  85.     }  
  86.   
  87.     @Override  
  88.     public String lpop(final String key) {  
  89.         String result = redisTemplate.execute(new RedisCallback<String>() {  
  90.             @Override  
  91.             public String doInRedis(RedisConnection connection) throws DataAccessException {  
  92.                 RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
  93.                 byte[] res =  connection.lPop(serializer.serialize(key));  
  94.                 return serializer.deserialize(res);  
  95.             }  
  96.         });  
  97.         return result;  
  98.     }  
  99.   
  100. }  


其中的JSONUtil类,可下载demo代码查看,其实就是一个JSON的工具类。

 

 

在ExampleController中添加测试方法:

 

[java] view plain copy
  1. @RestController  
  2. public class ExampleController {  
  3.   
  4.     @Autowired  
  5.     private IUserService userService;  
  6.       
  7.     @Autowired  
  8.     private IRedisService redisService;  
  9.       
  10.     @RequestMapping("/users")  
  11.     public ResponseModal users(){  
  12.         List<User> users = userService.getAll();  
  13.         ResponseModal modal = new ResponseModal(200,true,"",users);  
  14.         return modal;  
  15.     }  
  16.       
  17.     @RequestMapping("/redis/set")  
  18.     public ResponseModal redisSet(@RequestParam("value")String value){  
  19.         boolean isOk = redisService.set("name", value);  
  20.         return new ResponseModal(isOk ? 200 : 500, isOk, isOk ? "success" : "error" , null);  
  21.     }  
  22.       
  23.     @RequestMapping("/redis/get")  
  24.     public ResponseModal redisGet(){  
  25.         String name = redisService.get("name");  
  26.         return new ResponseModal(200true,"success",name);  
  27.     }  
  28.       
  29. }  

 

 

 

 

 

运行Application的main函数

浏览器输入:http://localhost:8080/redis/set?value=vic  响应结果:

 

{"code":200,"success":true,"message":"success","response":null}

 

浏览器输入:http://localhost:8080/redis/get  响应结果:

 

{"code":200,"success":true,"message":"success","response":"vic"}

 

示例代码下载

 

原文见:http://blog.csdn.net/i_vic/article/details/53081241

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QtCreator无法编辑源文件

在Qt Creator中新建工程&#xff0c;添加现有C源文件&#xff0c;有的源文件可以编辑&#xff0c;有的源文件编辑不了&#xff0c;发现无法编辑的源文件有一个共同特点&#xff0c;即其中都包含中文&#xff0c;且中文出现乱码&#xff0c;于是&#xff0c;点击Qt Creator菜单栏…

Unicode简介和使用

一、Unicode简介 在第一章中&#xff0c;我已经预告&#xff0c;C语言中在Microsoft Windows程序设计中扮演着重要角色的任何部分都会讲述到&#xff0c;您也许在传统文字模式程序设计中还尚未遇到过这些问题。宽字符集和Unicode差不多就是这样的问题。 简单地说&#xff0c;…

webpack4.x 模块化浅析-CommonJS

先看下webpack官方文档中对模块的描述&#xff1a; 在模块化编程中&#xff0c;开发者将程序分解成离散功能块(discrete chunks of functionality)&#xff0c;并称之为模块。每个模块具有比完整程序更小的接触面&#xff0c;使得校验、调试、测试轻而易举。 精心编写的模块提供…

设计模式--抽象工厂(个人笔记)

一、抽象工厂的应用场景以及优缺点 1 应用场景&#xff1a; 如果系统需要多套的代码解决方案&#xff0c;并且每套的代码解决方案中又有很多相互关联的产品类型&#xff0c;并且在系统中我们可以相互替换的使用一套产品的时候可以使用该模式&#xff0c;客户端不需要依赖具体的…

利用阿里云OSS对文件进行存储,上传等操作

--pom.xml加入阿里OSS存储依赖 <!--阿里云OSS存储--> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3</version> </dependency> --配置阿里云oss相关常量参数 /…

Java并发编程之ThreadGroup

ThreadGroup是Java提供的一种对线程进行分组管理的手段&#xff0c;可以对所有线程以组为单位进行操作&#xff0c;如设置优先级、守护线程等。 线程组也有父子的概念&#xff0c;如下图&#xff1a; 线程组的创建 1 public class ThreadGroupCreator {2 3 public static v…

springboot 缓存ehcache的简单使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 步骤&#xff1a; 1. pom文件中加 maven jar包&#xff1a; <!-- ehcache 缓存 --><dependency><groupId>net.sf.eh…

Spring boot + mybatis plus 快速构建项目,生成基本业务操作代码。

---进行业务建表&#xff0c;这边根据个人业务分析&#xff0c;不具体操作 --加入mybatis plus pom依赖 <!-- mybatis-plus 3.0.5--> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>&l…

给手机浏览器减负 轻装上阵才能速度制胜

随着手机浏览器的发展&#xff0c;浏览器已经变得臃肿不堪&#xff0c;各种“功能”系于一身&#xff0c;有广告、社区、乐园等等&#xff0c;我们真的需要它们吗&#xff1f;如何才能让浏览器做到轻装上阵&#xff0c;又能高效满足我们需求呢&#xff1f; 过多“功能”的浏览器…

653. Two Sum IV - Input is a BST

题目来源&#xff1a; 自我感觉难度/真实难度&#xff1a; 题意&#xff1a; 分析&#xff1a; 自己的代码&#xff1a; class Solution(object):def findTarget(self, root, k):""":type root: TreeNode:type k: int:rtype: bool"""Allself.InO…

解决 dubbo问题:Forbid consumer 192.xx.xx.1 access service com.xx.xx.xx.rpc.api.xx from registry 116.xx1

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我的情况是&#xff1a; 原本我把服务放在A工程中&#xff0c;后来改到B工程中了&#xff0c;所以原来的服务不存在了&#xff0c;查不…

vue学习:7、路由跳转

2019独角兽企业重金招聘Python工程师标准>>> <body><div id"app"></div></body><script type"text/javascript">var Login {template: <div>我是登陆界面</div>};var Register {template: <div…

Spring Retry 重试机制实现及原理

概要 Spring实现了一套重试机制&#xff0c;功能简单实用。Spring Retry是从Spring Batch独立出来的一个功能&#xff0c;已经广泛应用于Spring Batch,Spring Integration, Spring for Apache Hadoop等Spring项目。本文将讲述如何使用Spring Retry及其实现原理。 背景 重试&…

inline 内联函数详解 内联函数与宏定义的区别

一、在C&C中   一、inline 关键字用来定义一个类的内联函数&#xff0c;引入它的主要原因是用它替代C中表达式形式的宏定义。表达式形式的宏定义一例&#xff1a;#define ExpressionName(Var1,Var2) ((Var1)(Var2))*((Var1)-(Var2))为什么要取代这种形式呢&#xff0c;且…

Oracle序列更新为主键最大值

我们在使用 Oracle 数据库的时候&#xff0c;有时候会选择使用自增序列作为主键。但是在开发过程中往往会遇到一些不规范的操作&#xff0c;导致表的主键值不是使用序列插入的。这样在数据移植的时候就会出现各种各样的问题。当然数据库主键不使用序列是一种很好的方式&#xf…

dubbo forbid service的解决办法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 017-05-31 10:36:54.523 [http-nio-8080-exec-5] ERROR c.h.pdl.web.APIExceptionHandler - Unknown Exception, URI /payday-loan-co…

用SSH登录远程的机器,在远程机器上执行本地机器上的脚本

假设本地的机器IP为10.245.111.90&#xff0c;我们想要在10.245.111.93上执行一个保存在10.245.111.90上的脚本。经过测试通过的命令如下&#xff1a;ssh root10.245.111.93 bash -s < /root/testlocal.sh如果要带参数的话&#xff0c;那就需要参考这篇文章中描述的代码了。…

golang学习之旅(1)

这段时间我开始了golang语言学习&#xff0c;其实也是为了个人的职业发展的拓展和衍生&#xff0c;语言只是工具&#xff0c;但是每个语言由于各自的特点和优势&#xff0c;golang对于当前编程语言的环境&#xff0c;是相对比较新的语言&#xff0c;对于区块链&#xff0c;大数…

为什么要在Linux平台上学C语言?用Windows学C语言不好吗?

用Windows还真的是学不好C语言。C语言是一种面向底层的编程语言&#xff0c;要写好C程序&#xff0c;必须对操作系统的工作原理非常清楚&#xff0c;因为操作系统也是用C写的&#xff0c;我们用C写应用程序直接使用操作系统提供的接口&#xff0c;Linux是一种开源的操作系统&am…

数据库中Schema(模式)概念的理解

在学习SQL的过程中&#xff0c;会遇到一个让你迷糊的Schema的概念。实际上&#xff0c;schema就是数据库对象的集合&#xff0c;这个集合包含了各种对象如&#xff1a;表、视图、存储过程、索引等。为了区分不同的集合&#xff0c;就需要给不同的集合起不同的名字&#xff0c;默…