spring boot 自学笔记(三) Redis集成—RedisTemplate_stringredistemplate.execute方法的返回值为long类型时执行的是什么操作-程序员宅基地

技术标签: spring boot  spring boot mybatis  spring boot redis  redis  

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

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

pom.xml  Redis相关依赖:

 

<?xml version="1.0" encoding="UTF-8"?>
<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.vic</groupId>
	<artifactId>vic</artifactId>
	<version>0.1.0</version>

	<properties>
		<java.version>1.7</java.version>
	</properties>
	
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.3.8.RELEASE</version>
	</parent>

	<dependencies>
		<!-- spring boot -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<!-- mybatis -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<dependency>
			<groupId>com.mchange</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.2.1</version>
		</dependency>
		
		
		<!-- redis -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-redis</artifactId>

		</dependency>
		
		<!--Gson-->  
        <dependency>  
            <groupId>com.google.code.gson</groupId>  
            <artifactId>gson</artifactId>  
        </dependency>  
		
		
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

 

 

application.properties增加redis相关属性:

 

 

#datasource
spring.datasource.jdbcUrl=jdbc:mysql://115.28.92.178:3306/wms?useUnicode\=true&characterEncoding\=utf8;autoReconnect\=true;maxReconnects\=10;connectTimeout\=180000;socketTimeout\=180000
spring.datasource.user=root
spring.datasource.password=xx
spring.datasource.driverClass=com.mysql.jdbc.Driver
spring.datasource.maxActive=100
spring.datasource.initialPoolSize=5
spring.datasource.minPoolSize=5
spring.datasource.maxPoolSize=20
spring.datasource.maxStatements=100
spring.datasource.maxIdleTime=3600
spring.datasource.acquireIncrement=2
spring.datasource.acquireRetryAttempts=10
spring.datasource.acquireRetryDelay=600
spring.datasource.testConnectionOnCheckin=true
spring.datasource.idleConnectionTestPeriod=1200
spring.datasource.checkoutTimeout=100000


#redis
spring.redis.hostName=115.28.92.178
spring.redis.port=6379  
spring.redis.password=xxx
spring.redis.pool.maxActive=8  
spring.redis.pool.maxWait=-1  
spring.redis.pool.maxIdle=8  
spring.redis.pool.minIdle=0  
spring.redis.timeout=0





 

 

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

 

 

/**
 * 
 * @author vic
 * @desc redis config bean
 *
 */
@Configuration
@EnableAutoConfiguration
public class RedisConfig {

	private static Logger logger = Logger.getLogger(RedisConfig.class);
	
	@Bean
	@ConfigurationProperties(prefix="spring.redis")
	public JedisPoolConfig getRedisConfig(){
		JedisPoolConfig config = new JedisPoolConfig();
		return config;
	}
	
	@Bean
	@ConfigurationProperties(prefix="spring.redis")
	public JedisConnectionFactory getConnectionFactory(){
		JedisConnectionFactory factory = new JedisConnectionFactory();
		JedisPoolConfig config = getRedisConfig();
		factory.setPoolConfig(config);
		logger.info("JedisConnectionFactory bean init success.");
		return factory;
	}
	
	
	@Bean
	public RedisTemplate<?, ?> getRedisTemplate(){
		RedisTemplate<?,?> template = new StringRedisTemplate(getConnectionFactory());
		return template;
	}
}

 

 

 

 

 

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

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

 

IRedisService.java

 

/**
 * 
 * @author vic
 * @desc redis service
 */
public interface IRedisService {
	
	public boolean set(String key, String value);
	
	public String get(String key);
	
	public boolean expire(String key,long expire);
	
	public <T> boolean setList(String key ,List<T> list);
	
	public <T> List<T> getList(String key,Class<T> clz);
	
	public long lpush(String key,Object obj);
	
	public long rpush(String key,Object obj);
	
	public String lpop(String key);
	
}


RedisServiceImpl.java

 

 

/**
 * 
 * @author vic
 * @desc resdis service
 *
 */
@Service
public class RedisServiceImpl implements IRedisService{

	@Autowired
	private RedisTemplate<String, ?> redisTemplate;
	
	@Override
	public boolean set(final String key, final String value) {
		boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
            	RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                connection.set(serializer.serialize(key), serializer.serialize(value));
                return true;
            }
	    });
		return result;
	}

	public String get(final String key){
		String result = redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
            	RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                byte[] value =  connection.get(serializer.serialize(key));
                return serializer.deserialize(value);
            }
	    });
		return result;
	}

	@Override
	public boolean expire(final String key, long expire) {
		return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
	}

	@Override
	public <T> boolean setList(String key, List<T> list) {
		String value = JSONUtil.toJson(list);
		return set(key,value);
	}

	@Override
	public <T> List<T> getList(String key,Class<T> clz) {
		String json = get(key);
		if(json!=null){
			List<T> list = JSONUtil.toList(json, clz);
			return list;
		}
		return null;
	}

	@Override
	public long lpush(final String key, Object obj) {
		final String value = JSONUtil.toJson(obj);
		long result = redisTemplate.execute(new RedisCallback<Long>() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
            	RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                long count = connection.lPush(serializer.serialize(key), serializer.serialize(value));
                return count;
            }
	    });
		return result;
	}

	@Override
	public long rpush(final String key, Object obj) {
		final String value = JSONUtil.toJson(obj);
		long result = redisTemplate.execute(new RedisCallback<Long>() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
            	RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                long count = connection.rPush(serializer.serialize(key), serializer.serialize(value));
                return count;
            }
	    });
		return result;
	}

	@Override
	public String lpop(final String key) {
		String result = redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
            	RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                byte[] res =  connection.lPop(serializer.serialize(key));
                return serializer.deserialize(res);
            }
	    });
		return result;
	}

}


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

 

 

在ExampleController中添加测试方法:

 

@RestController
public class ExampleController {

	@Autowired
	private IUserService userService;
	
	@Autowired
	private IRedisService redisService;
	
	@RequestMapping("/users")
	public ResponseModal users(){
		List<User> users = userService.getAll();
		ResponseModal modal = new ResponseModal(200,true,"",users);
		return modal;
	}
	
	@RequestMapping("/redis/set")
	public ResponseModal redisSet(@RequestParam("value")String value){
		boolean isOk = redisService.set("name", value);
		return new ResponseModal(isOk ? 200 : 500, isOk, isOk ? "success" : "error" , null);
	}
	
	@RequestMapping("/redis/get")
	public ResponseModal redisGet(){
		String name = redisService.get("name");
		return new ResponseModal(200, true,"success",name);
	}
	
}

 

 

 

 

 

运行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"}

 

示例代码下载

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/i_vic/article/details/53081241

智能推荐

Highcharts 不同高度的3D饼图_highcharts 3d饼图每个伞形高度不同-程序员宅基地

文章浏览阅读1.8k次。先上效果:完整代码如下(复制粘贴改id即可):// 修改3d饼图绘制过程var each = Highcharts.each, round = Math.round, cos = Math.cos, sin = Math.sin, deg2rad = Math.deg2rad;Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'translate', function(proceed) { proceed.apply(this,_highcharts 3d饼图每个伞形高度不同

学习笔记---元数据、程序集、GAC版本控制、属性(Attribute)、反射(利用.NET编译器实现表达式计算器)...-程序员宅基地

文章浏览阅读137次。1. 元数据(Metadata): 元数据被存储在程序集中, 用来对程序集中的类型和方法进行描述, 程序集之所以是可描述的就是因为元数据完整的描述了程序集中每个模块的内容. 简而言之, 元数据就是用来描述数据的数据, 即元数据描述代码和数据(如类型、代码、程序集等等信息).NET应用程序实际上由 代码、数据和元数据组成, 元数据的来源有两个: 属性Attribute(非封装字段用的Proper..._用记数据版本管理

RegNet网络结构与搭建-程序员宅基地

文章浏览阅读2.7w次,点赞84次,收藏208次。目录前言设计设计空间RegNet网络结构详解RegNet结构框架RegNet block详解RegNetX模型详细参数RegNetY模型详细参数前言原论文名称:Designing Network Design Spaces原论文下载地址:https://arxiv.org/abs/2003.13678.pdf论文中提供的源码: https://github.com/facebookresearch/pycls自己使用Pytorch实现的RegNet代码: Test10_regnet/model.p_regnet

在vue项目中使用vue-awesome-swiper,实现移动端仿腾讯视频首页轮播图,两边显示图片,中间图片放大_swiper 实现视频和图-程序员宅基地

文章浏览阅读2.2k次。在vue项目中使用vue-awesome-swiper实现移动端仿腾讯视频首页轮播图,两边显示图片,中间图片放效果如下 : 大佬们勿喷 , 感谢指点 ;先装包 vue-awesome-swiper 传送门: https://github.surmon.me/vue-awesome-swiper/引入; // 引入vue-awesome-swiper import 'swi..._swiper 实现视频和图

西蒙购物网实训三-程序员宅基地

文章浏览阅读76次。首先我们在web里面建立一个images用来存放目录。在web里面创建css子目录,并建立一个main.css`/* 样式 */body {margin: 0px;text-align: center;background: url("…/images/frontBack.jpg") no-repeat;background-size: 100%}table {margi...

Eclipse下启动tomcat报错:/bin/tool.jar which is referenced by the classpath, does not exist._tools.jar which is referenced by the classpath, do-程序员宅基地

文章浏览阅读6.2k次,点赞5次,收藏3次。1.错误:在Eclipse下启动tomcat的时候,报错为:Eclipse下启动tomcat报错:The archive: D:/Program Files/Java/jdk1.7.0_10/lib/tools.jar which is referenced by the classpath, doesnot exist.2.原因:这是因为我中途移动_tools.jar which is referenced by the classpath, does not exist.

随便推点

elemeng-ui 中el-form 表单如何校验_elform trigger-程序员宅基地

文章浏览阅读1.3k次,点赞3次,收藏3次。elemeng-ui 中el-form 表单如何校验在面对项目中大量的表单提交以及规则验证,Element-ui Form 表单是我们最好的帮手。表单校验是注册环节中必不可少的操作,表单校验可以提醒用户填写数据规则以确保用户提交数据的有效性,也可以防止用户失误操作、填写错误数据或者恶意提交数据而占用服务器资源。ElementUI 校验规则ElementUI封装了组件el-form来收集、校验和提交数据,其中的rules属性就是用来做数据校验的。ElementUI提供了一些常用的表单验证规则,我_elform trigger

python字节流串联_python中的串联和重复-程序员宅基地

文章浏览阅读623次。python字节流串联 Python中的串联和重复: (Concatenation and Repetition in Python:)In python, concatenations and repetitions are supported by sequence data types both mutable(list) and immutable(tuple, strings). Se..._python 字节流 重复

L1-036 A乘以B (5 分)_7-4 a乘以b 分数 5 作者 陈越 单位 浙江大学 看我没骗你吧 —— 这是一道你可以在-程序员宅基地

文章浏览阅读3k次。L1-036 A乘以B (5 分)看我没骗你吧 —— 这是一道你可以在 10 秒内完成的题:给定两个绝对值不超过 100 的整数 A 和 B,输出 A 乘以 B 的值。输入格式:输入在第一行给出两个整数 A 和 B(−100≤A,B≤100),数字间以空格分隔。输出格式:在一行中输出 A 乘以 B 的值。输入样例:-8 13输出样例:-104作者: ..._7-4 a乘以b 分数 5 作者 陈越 单位 浙江大学 看我没骗你吧 —— 这是一道你可以在

Pandas出现KeyError及其分析解决_df格式 keyerror: 0-程序员宅基地

文章浏览阅读2.6k次,点赞3次,收藏2次。pandas出现keyerror_df格式 keyerror: 0

5.[JAVA视频教程]JavaEE高级工程师 目录六_deferredresult源码分析视频教程-程序员宅基地

文章浏览阅读155次。更多视频,JAVA收徒QQ:9871158853.全套JAVA教程--JavaEE必备 Git&GitHUP视频教程 视频.zip 资料.zip Hibernate视频教程 1. _Hibernate_概述&安装 Hibernatetools 插件.wmv 10. _Hibernate_详解 Hibernate 映射文件(2).wmv ._deferredresult源码分析视频教程

2019 牛客暑假多校训练营 第四场 I 广义后缀自动机+回文自动机_广义回文自动机-程序员宅基地

文章浏览阅读291次。广义后缀自动机,求多个串的本质不同子串个数。回文自动机求回文串个数#include<bits/stdc++.h>using namespace std;const int maxn = 4e5+100;char s[maxn];int len;int T;int n,m;struct SAM{ int last,cnt,nxt[maxn*2][26]..._广义回文自动机

推荐文章

热门文章

相关标签