天天看點

【springboot學習】內建redis-RedisTemplate

redis資料類型指的啥

redis自身是一個map,其中所有的資料嗾使采用key:value的形式存儲。

key永遠都是字元串,資料類型(字元串,hash,set,list)永遠指的是右邊value

【springboot學習】內建redis-RedisTemplate

redis最終存儲的都隻是基本資料類型,字元串,整數,浮點數,布爾值,字元等,而無法直接存儲對象,但是我們可以通過序列化手段把對象變成字元串,這樣就可以存儲在redis中了,但是jedis隻支援字元串和位元組數組,而字元串最終也會轉換成位元組數組寫到redis中(位元組流傳輸)。如果想要直接存儲對象,可以使用spring的RedisTemplate,友善基礎類型和 Java 對象之間的轉換。

首先導入依賴包

<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-data-redis</artifactId>
	</dependency>
           

配置RedisTemplate

而對象儲存在redis中,隻儲存空對象肯定沒啥意義,這就需要序列化對象,将對象持久化到redis中,RedisTemplate預設使用JDK的序列化方式,當然我們一般如下配置。

推薦key使用StringRedisSerializer,保持的key簡明易讀;value可以使用Jackson2JsonRedisSerializer,這也可以綜合考慮效率和可讀性,但犧牲部分空間,

@Configuration
public class RedisConfig {

	@Bean
	public RedisTemplate<String,Object> redisTemplate(final RedisConnectionFactory factory) {
		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
		template.setConnectionFactory(factory);// 配置連接配接工廠
		Jackson2JsonRedisSerializer<Object> jacksonSeial = new Jackson2JsonRedisSerializer<Object>(Object.class);
		ObjectMapper om = new ObjectMapper();
		// 指定要序列化的域,field,get和set,以及修飾符範圍,ANY是都有包括private和public
		om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		// 指定序列化輸入的類型,類必須是非final的,final修飾的類,比如String,Integer等會抛出異常
		om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
		jacksonSeial.setObjectMapper(om);
		template.setValueSerializer(jacksonSeial);
		template.setKeySerializer(new StringRedisSerializer());
		return template;
	}
}
           

當然也可以采用其他的序列化方式,spring-data-redis提供如下幾種選擇:

GenericToStringSerializer: 可以将任何對象泛化為字元串并序列化
Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer實際上是一樣的
JacksonJsonRedisSerializer: 序列化object對象為json字元串
JdkSerializationRedisSerializer: 序列化java對象
StringRedisSerializer: 簡單的字元串序列化
           

具體的差別看這篇文章。

連接配接redis

配置好了RedisTemplate,我們還需要讓RedisTemplate連接配接到redis伺服器呀,RedisTemplate預設使用JedisConnectionFactory來連接配接redis伺服器。具體可以搜一下

RedisAutoConfiguration

這個是核心配置類。

【springboot學習】內建redis-RedisTemplate
spring.redis.host=localhost
spring.redis.port=6379
# Redis伺服器連接配接密碼(預設為空)
spring.redis.password=
           

到此RedisTemplate就配置好了.

方法使用

下面就直接在程式中注入就可以使用了。

@Service
public class RedisService {

	@Autowired
	RedisTemplate<String, Object> redisTemplate;

	public void setKeyValue(final String key, final Object value) {

		redisTemplate.opsForValue().set(key, value);
	}

	public Object getKeyValue(final String key) {
		return redisTemplate.opsForValue().get(key);
	}

}
           

redisTemplate.opsForValue()相對于redis的string類型,當然其他資料類型都是相對應的,如下:

redisTemplate方法 redis資料類型
opsForValue() string
opsForHash() hash
opsForList() list
opsForSet() set
opsForZSet() zset

| list |

| opsForSet() | set |

| opsForZSet() | zset |

繼續閱讀