spring boot 2.x redis
使用RedisTemplate 操做spring
===================================apache
1.pom.xmlapp
<!--spring2.0集成redis所需common-pool2--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <!-- 使用redis的LUA腳本 須要序列化操做的jar--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
2.redisConfig 須要加入spring的自動配置ide
/** * @author sxd * @date 2019/5/27 16:13 */ @Configuration @AutoConfigureAfter(RedisAutoConfiguration.class) public class RedisConfig { @Bean public RedisTemplate<String, String> 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; } }
3.controllerspa
@Autowired RedisTemplate redisTemplate; /** * redis 批量操做其中一種方式 * redis pipeline 管道技術 */ @RequestMapping(value = "/redisPipeline" ) public void redisPipeline(){ // 1.executePipelined 重寫 入參 RedisCallback 的doInRedis方法 List<Object> resultList = redisTemplate.executePipelined(new RedisCallback<Object>() { @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<byte[],byte[]> 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)); } }
運行結果:code
true true m_value2
redis中結果:xml