1.利用springboot整个redis
pom文件
<?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.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. yml文件
spring:
application:
name: redis-demo
redis:
database: 0
host: 127.0.0.1
port: 6379
timeout: 0 # 连接超时时间(毫秒)
pool:
max-active: 20 # 连接池最大连接数(使用负值表示没有限制)
max-idle: 20 # 连接池中的最大空闲连接
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 0 # 连接池中的最小空闲连接
server:
port: 8080
servlet:
context-path: /redis-demo
3.redis config 配置
package com.example.demo.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import java.util.Arrays;
/**
* @Title: redis配置类
* @Package RedisConfig
* redis配置类
* @author syliu
* @create 2017/9/29 0029
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
4. 生成方式
package com.example.demo.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Calendar;
import java.util.Date;
/**
* @author syliu
* 利用redis生成数据库全局唯一性id
*/
@Service
public class PrimaryKeyService {
@Autowired
private RedisTemplate redisTemplate;
/**
* 获取年的后两位加上一年多少天+当前小时数作为前缀
* @param date
* @return
*/
public String getOrderIdPrefix(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
//补两位,因为一年最多三位数
String monthFormat = String.format("%1$02d", month+1);
//补两位,因为日最多两位数
String dayFormat = String.format("%1$02d", day);
//补两位,因为小时最多两位数
String hourFormat = String.format("%1$02d", hour);
return year + monthFormat + dayFormat+hourFormat;
}
/**
* 生成订单
* @param prefix
* @return
*/
public Long orderId(String prefix) {
String key = "DEMO_ORDER_ID_" + prefix;
String orderId = null;
try {
Long increment = redisTemplate.opsForValue().increment(key,1);
//往前补6位
orderId=prefix+String.format("%1$06d",increment);
} catch (Exception e) {
System.out.println("生成订单号失败");
e.printStackTrace();
}
return Long.valueOf(orderId);
}
}
5.测试类
package com.example.demo;
import com.example.demo.service.PrimaryKeyService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
private PrimaryKeyService primaryKeyService;
@Test
public void contextLoads() {
long startMillis = System.currentTimeMillis();
String orderIdPrefix = primaryKeyService.getOrderIdPrefix(new Date());
for (int i = 0; i < 10; i++) {
Long aLong = primaryKeyService.orderId(orderIdPrefix);
System.out.println(aLong);
}
long endMillis = System.currentTimeMillis();
System.out.println("生成速度:"+(endMillis-startMillis)+",单位毫秒");
}
}
6.测试结果
打印订单号: