1.配置redis-config
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}"></property> <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"></property> <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"></property> <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}"></property> </bean> <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" /> <bean id="jdkRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> <bean id="jedisConnectionZero" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy"> <property name="poolConfig" ref="jedisPoolConfig"></property> <property name="hostName" value="${redisst.hostName}"></property> <property name="port" value="${redisst.port}"></property> <property name="timeout" value="${redisst.timeout}"></property> <property name="usePool" value="${redisst.usePool}"></property> <property name="password" value="${redisst.password}" ></property> <property name="database" value="${redisst.db0}"></property> </bean> <bean id="redisTemplateZero" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionZero" /> <property name="keySerializer" ref="stringRedisSerializer" /> <property name="hashKeySerializer" ref="jdkRedisSerializer" /> <property name="valueSerializer" ref="jdkRedisSerializer"/> </bean>
|
2.定义枚举
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public enum CommonRedisEnums { O_DB_0("redisTemplateZero","ODB0"); private String name; private String asName;
CommonRedisEnums(String name, String asName) { this.name = name; this.asName = asName; }
public String getName() { return name; }
public String getAsName() { return asName; } }
|
3.使用SpringAppContextHolder获取bean
1 2 3 4 5 6 7 8 9 10 11
| private static Map<String,RedisTemplate> redisTemplateMap = new HashMap<>();
public static void getRedis(CommonRedisEnums enums){ if(!redisTemplateMap.containsKey(enums.getName())){ RedisTemplate redisBean = (RedisTemplate) SpringAppContextHolder .getBean(enums.getName()); if(redisBean != null){ redisTemplateMap.put(enums.getName(),redisBean); } } }
|
4.使用工具类进行调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
public static Map<String, Object> searchKeys(List<String> keys,CommonRedisEnums enums){ getRedis(enums); return batchQueryByKeys(keys, false,redisTemplateMap.get(enums.getName())); }
public static Map<String, Object> batchQueryByKeys(final List<String> keys, Boolean useParallel, final RedisTemplate redisTemplate) { if (null == keys || keys.size() == 0) { return null; } if (null == useParallel) { useParallel = true; } Object object = redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.openPipeline(); for (String key : keys) { byte[] bkey = redisTemplate.getStringSerializer().serialize(key); redisTemplate.getStringSerializer().serialize(JSON.toJSONString(connection.get(bkey))); }
return connection.closePipeline(); } }); List<Object> results = null; if (null == object) { return null; } else { results = (List) object; } Map<String, Object> resultMap = null; if (useParallel) { Map<String, Object> resultMapOne = Collections.synchronizedMap(new HashMap<String, Object>()); for (String t : keys) { resultMapOne.put(t, results.get(keys.indexOf(t))); } resultMap = resultMapOne; } else { Map<String, Object> resultMapTwo = new HashMap<>(); for (String t : keys) { Object o = results.get(keys.indexOf(t)); if (null != o) { String val = (String) redisTemplate.getStringSerializer().deserialize((byte[]) o); resultMapTwo.put(t, val); } } resultMap = resultMapTwo; } return resultMap; }
|
小结
使用@Autowired的时候,对于static标识的变量或者方法一般是获取到的null值常规的方法已经使用不了
1 2
| @Autowired private NewRedisZeroService redisZeroService;
|
需要使用注入方法的形式来使用
1 2 3 4 5 6 7 8
| private static ZXSearchNewService_new zxSearchNewService_new; private static QueueProducerService messageService;
@Autowired public zxSearch(QueueProducerService queueProducerService,ZXSearchNewService_new zxSearchNewService_new) { zxSearch.zxSearchNewService_new = zxSearchNewService_new; zxSearch.messageService = queueProducerService; }
|
这样就可以在工具类中使用了,不需要通过传参的形式去获取