spring boot 2.x 

使用RedisTemplate 操作

===================================

 

1.pom.xml

org.apache.commons

commons-pool2

2.4.2

com.fasterxml.jackson.core

jackson-core

com.fasterxml.jackson.core

jackson-annotations

com.fasterxml.jackson.core

jackson-databind

 

 

2.redisConfig 需要加入spring的自动配置

/**

* @author sxd

* @date 2019/5/27 16:13

*/

@Configuration

@AutoConfigureAfter(RedisAutoConfiguration.class)

public class RedisConfig {

@Bean

public RedisTemplate redisTemplate(RedisConnectionFactory factory) {

RedisTemplate redisTemplate = new RedisTemplate();

redisTemplate.setConnectionFactory(factory);

RedisSerializer keySerializer = new StringRedisSerializer();

// RedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer();

//key采用字符串反序列化对象

redisTemplate.setKeySerializer(keySerializer);

//value也采用字符串反序列化对象

//原因:管道操作,是对redis命令的批量操作,各个命令返回结果可能类型不同

//可能是 Boolean类型 可能是String类型 可能是byte[]类型 因此统一将结果按照String处理

redisTemplate.setValueSerializer(keySerializer);

return redisTemplate;

}

}

View Code

 

 

3.controller

@Autowired

RedisTemplate redisTemplate;

/**

* redis 批量操作其中一种方式

* redis pipeline 管道技术

*/

@RequestMapping(value = "/redisPipeline" )

public void redisPipeline(){

// 1.executePipelined 重写 入参 RedisCallback 的doInRedis方法

List resultList = redisTemplate.executePipelined(new RedisCallback() {

@Override

public String doInRedis(RedisConnection connection) throws DataAccessException {

// 2.connection 打开管道

connection.openPipeline();

// 3.connection 给本次管道内添加 要一次性执行的多条命令

// 3.1 一个set操作

byte[] key1 = "mykey1".getBytes();

byte[] value1 = "字符串value".getBytes();

connection.set(key1,value1);

// 3.2一个批量mset操作

Map tuple = new HashMap<>();

tuple.put("m_mykey1".getBytes(),"m_value1".getBytes());

tuple.put("m_mykey2".getBytes(),"m_value2".getBytes());

tuple.put("m_mykey3".getBytes(),"m_value3".getBytes());

connection.mSet(tuple);

// 3.3一个get操作

connection.get("m_mykey2".getBytes());

// 4.关闭管道 不需要close 否则拿不到返回值

// connection.closePipeline();

// 这里一定要返回null,最终pipeline的执行结果,才会返回给最外层

return null;

}

});

// 5.最后对redis pipeline管道操作返回结果进行判断和业务补偿

for (Object str : resultList) {

System.out.println(String.valueOf(str));

}

}

View Code

 

 

运行结果:

true

true

m_value2

 

 

redis中结果:

 

查看原文

发表评论

返回顶部暗黑模式