前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
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"}
?
示例代碼下載
?
原文見:http://blog.csdn.net/i_vic/article/details/53081241