【Java】配置redis 注解 @Async 实现异步方法 uuid 完整代码(个人梳理)
【Java】配置redis 注解 @Async 实现异步方法 uuid 完整代码(个人梳理)
文章目录
前言
前台发送批处理请求到后台,后台接受请求,生成唯一值uuid,调用异步处理方法,将实时处理结果以uuid为key值存储到redis中, 前台接收到请求后不断以uuid轮询后台,后台将redis中处理结果返还前台进行页面展示。
一、配置redis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- Jedis线程 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="20" />
<property name="minIdle" value="5" />
<property name="maxTotal" value="100" />
<property name="testOnBorrow" value="true" />
</bean>
<!-- jedis客户端单机版 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="192.168.1.201"></constructor-arg>
<constructor-arg name="port" value="自己的端口号"></constructor-arg>
<constructor-arg name="password" value="自己的密码"></constructor-arg>
<constructor-arg name="timeout" value="3000"></constructor-arg>
<constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
</bean>
<bean id="jedisClient" class="com.自己的包名.training.util.jedis.JedisClientSingleImpl"/>
</beans>
二、配置Jedis工具类
1.JedisClient
package com.自己的包名.training.util.jedis;
import java.util.Set;
/**
* Created by Administrator
*/
public interface JedisClient {
/**
* 获取缓存
* @param key
* @return
*/
String get(String key);
byte[] get(byte[] key);
/**
* 设置缓存
* @param key
* @param value
* @return
*/
String set(String key, String value);
/**
* 设置缓存
* @param key
* @param value
* @param expire 过去时间
* @return
*/
String set(String key, String value, int expire);
String set(byte[] key, byte[] value);
String set(byte[] key, byte[] value, int expire);
/**
* 哈希 获取缓存
* @param hkey
* @param key
* @return
*/
String hget(String hkey, String key);
/**
* 哈希 设置缓存
* @param hkey
* @param key
* @param value
* @return
*/
long hset(String hkey, String key, String value);
/**
*获取自增值
* @param key
* @return
*/
long incr(String key);
/**
*设置有效期
* @param key
* @param second
* @return
*/
long expire(String key, int second);
/**
*获取有效期
* @param key
* @return
*/
long ttl(String key);
/**
* 删除缓存
* @param key
* @return
*/
long del(String key);
long del(byte[] key);
/**
* 删除哈希 缓存
* @param hkey
* @param key
* @return
*/
long hdel(String hkey, String key);
Set<byte[]> keys(String pattern);
/**
* 刷新数据
*/
void flushDB();
Long dbSize();
}
2.配置JedisClientSingleImpl
package com.自己的包名.training.util.jedis;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Set;
public class JedisClientSingleImpl implements JedisClient{
@Autowired
private JedisPool jedisPool;
@Override
public String get(String key) {
String value = null;
Jedis jedis = jedisPool.getResource();
try{
value = jedis.get(key);
} catch (Exception e) {
jedisPool.returnBrokenResource(jedis);
} finally {
jedisPool.returnResource(jedis);
}
return value;
}
@Override
public byte[] get(byte[] key) {
byte[] value = null;
Jedis jedis = jedisPool.getResource();
try{
value = jedis.get(key);
} catch (Exception e) {
jedisPool.returnBrokenResource(jedis);
} finally {
jedisPool.returnResource(jedis);
}
return value;
}
@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
try {
value =