天天看點

多個redistemplate_Spring boot注入多個redisTemplate,并更改預設序列化政策

1、添加maven依賴

org.springframework.boot

spring-boot-starter-data-redis

2、配置檔案中增加redis連接配接相關資訊spring.redis.hostName=192.168.0.134

spring.redis.port=6379

spring.redis.database=0

spring.redis.pool.max-idle=8

spring.redis.pool.min-idle=0

spring.redis.pool.max-active=8

spring.redis.pool.max-wait=-23、建立一個配置類package com.example.config;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.StringRedisTemplate;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.fasterxml.jackson.annotation.PropertyAccessor;

import com.fasterxml.jackson.databind.ObjectMapper;

import redis.clients.jedis.JedisPoolConfig;

@Configuration

@EnableAutoConfiguration

public class RedisConfig {

private static Logger logger = LoggerFactory.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()); //隻能對字元串的鍵值操作

System.out.println("生成,?>template:" + template);

return template;

}

@Bean(name = "LongRedisTemplate")

public RedisTemplate getRedisTemplate1(){

RedisTemplate template = new RedisTemplate(); //隻能對字元串的鍵值操作

template.setConnectionFactory(getConnectionFactory());

// 使用Jackson2JsonRedisSerialize 替換預設序列化(預設采用的是JDK序列化)

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper om = new ObjectMapper();

om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(om);

template.setKeySerializer(jackson2JsonRedisSerializer);

template.setValueSerializer(jackson2JsonRedisSerializer);

template.setHashKeySerializer(jackson2JsonRedisSerializer);

template.setHashValueSerializer(jackson2JsonRedisSerializer);

template.afterPropertiesSet();

System.out.println("生成template:" + template);

return template;

}

@Bean(name = "StringRedisTemplate")

public RedisTemplate getRedisTemplate2(){

RedisTemplate template = new RedisTemplate(); //隻能對字元串的鍵值操作

template.setConnectionFactory(getConnectionFactory());

// 使用Jackson2JsonRedisSerialize 替換預設序列化(預設采用的是JDK序列化)

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper om = new ObjectMapper();

om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(om);

template.setKeySerializer(jackson2JsonRedisSerializer);

template.setValueSerializer(jackson2JsonRedisSerializer);

template.setHashKeySerializer(jackson2JsonRedisSerializer);

template.setHashValueSerializer(jackson2JsonRedisSerializer);

template.afterPropertiesSet();

System.out.println("生成template:" + template);

return template;

}

@Bean(name = "IntegerRedisTemplate")

public RedisTemplate getRedisTemplate3(){

RedisTemplate template = new RedisTemplate(); //隻能對字元串的鍵值操作

template.setConnectionFactory(getConnectionFactory());

// 使用Jackson2JsonRedisSerialize 替換預設序列化(預設采用的是JDK序列化)

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper om = new ObjectMapper();

om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(om);

template.setKeySerializer(jackson2JsonRedisSerializer);

template.setValueSerializer(jackson2JsonRedisSerializer);

template.setHashKeySerializer(jackson2JsonRedisSerializer);

template.setHashValueSerializer(jackson2JsonRedisSerializer);

template.afterPropertiesSet();

System.out.println("生成template:" + template);

return template;

}

}4、使用及測試A、測試注入不同類型的模闆根據 @Resource 注解import java.util.Set;

import javax.annotation.Resource;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.SetOperations;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class RedisController {

@Resource(name = "StringRedisTemplate")

private RedisTemplate stringRedisTemplate;

@Resource(name = "LongRedisTemplate")

private RedisTemplate longRedisTemplate;

@Resource(name = "IntegerRedisTemplate")

private RedisTemplate integerRedisTemplate;

@RequestMapping(value = "/redis")

public String testRedis() {

System.out.println("stringRedisTemplate:" + stringRedisTemplate);

System.out.println("longRedisTemplate:" + longRedisTemplate);

System.out.println("integerRedisTemplate:" + integerRedisTemplate);

testStringRedis();

testLongRedis();

testIntegerRedis();

return "成功!";

}

private void testStringRedis() {

SetOperations set = stringRedisTemplate.opsForSet(); //儲存Set

set.add("set1","22");

set.add("set1","33");

set.add("set1","33");

Set resultSet =stringRedisTemplate.opsForSet().members("set1"); //擷取Set

System.out.println("resultSet:"+resultSet);

}

private void testLongRedis() {

SetOperations set = longRedisTemplate.opsForSet();

set.add("set2",22L);

set.add("set2",22L);

set.add("set2",23L);

Set resultSet =longRedisTemplate.opsForSet().members("set2");

System.out.println("resultSet:"+resultSet);

}

private void testIntegerRedis() {

SetOperations set = integerRedisTemplate.opsForSet();

set.add("set3",222);

set.add("set3",333);

set.add("set3",555);

Set resultSet =integerRedisTemplate.opsForSet().members("set3");

System.out.println("resultSet:"+resultSet);

}

}B、測試例子(測試)Set、Hash、[email protected](name = "IntegerRedisTemplate")

private RedisTemplate integerRedisTemplate;

@RequestMapping(value = "/redis")

public String testRedis() {

testIntegerSetRedis();

testIntegerMapRedis();

testIntegerValueRedis();

return "成功!";

}

private void testIntegerSetRedis() {

System.out.println();

System.out.println("測試Set結構");

SetOperations set = integerRedisTemplate.opsForSet(); //添加Set

set.add("set1",22);

set.add("set1",33);

set.add("set1",55);

Set resultSet1 =integerRedisTemplate.opsForSet().members("set1"); //擷取Set

Set resultSet5 =integerRedisTemplate.opsForSet().members("set100"); //擷取為空的情況

System.out.println("resultSet5:"+resultSet5);

System.out.println("resultSet1:"+resultSet1);

set.remove("set1", 22); //删除元素

Set resultSet2 =integerRedisTemplate.opsForSet().members("set1"); //擷取Set

System.out.println("删除後:resultSet2:"+resultSet2);

}

private void testIntegerMapRedis() {

System.out.println();

System.out.println("測試Hash結構");

HashOperations redisMap = integerRedisTemplate.opsForHash(); //添加Map

Map map = new HashMap();

map.put("goodsId", 12345);

map.put("shopId", 52341);

map.put("coupon", 3232);

redisMap.putAll("hashMapTest", map);

Map resultSet1 =integerRedisTemplate.opsForHash().entries("hashMapTest"); //擷取Map

System.out.println("resultSet1:"+resultSet1);

redisMap.delete("hashMapTest", "goodsId"); //删除key

Map resultSet2 =integerRedisTemplate.opsForHash().entries("hashMapTest"); //擷取Map

System.out.println("删除後:resultSet2:"+resultSet2);

}

private void testIntegerValueRedis() {

System.out.println();

System.out.println("測試String-ValueOperations結構");

ValueOperations redisValue1 = integerRedisTemplate.opsForValue();

redisValue1.set("abcde", 123444); //設定

Integer result1 = redisValue1.get("abcde"); //擷取

System.out.println("result:" + result1);

BoundValueOperations redisValue2 = integerRedisTemplate.boundValueOps("abcde");

redisValue2.set(6666); //設定

Integer result2 = redisValue2.get(); //擷取

System.out.println("result:" + result2);

integerRedisTemplate.delete("abcde");

BoundValueOperations redisValu3 = integerRedisTemplate.boundValueOps("abcde");

System.out.println("删除後:result3:" + redisValu3.get());

}控制台列印結果:測試Set結構resultSet5:[]resultSet1:[22, 33, 55]删除後:resultSet2:[33, 55]

測試Hash結構resultSet1:{goodsId=12345, coupon=3232, shopId=52341}删除後:resultSet2:{shopId=52341, coupon=3232}

測試String-ValueOperations結構result:123444result:6666删除後:result3:null