【springboot学习】集成redis-RedisTemplate

redis数据类型指的啥

redis自身是一个map,其中所有的数据嗾使采用key:value的形式存储。

key永远都是字符串,数据类型(字符串,hash,set,list)永远指的是右边value
在这里插入图片描述
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这个是核心配置类。
在这里插入图片描述

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 |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值