1.Azure 本身提供了Azure Cache for Redis 的服务,如使用数据库一样,直接创建可用。
2.如何在spring boot中配置azure redis 可参考:
有一点需要注意,分两种连接方式,一种是未开通ssl, 一种是开通了ssl, 需要jedis进行连接,端口为6380。我们项目之前就是未开通的采用
org.springframework.data.redis.connection.RedisConnectionFactory;
org.springframework.data.redis.core.RedisTemplate;
进行连接的,端口为6379
项目中jedis初始化很简单:
@Bean
public Jedis jedisBean() {
JedisShardInfo shardInfo=new JedisShardInfo(redisHost,redisPort,redisSSL);
shardInfo.setPassword(redisPassword);
returnnewJedis(shardInfo);
}
在用到jedis的类autowire中注入jedis即可。参考:https://zhuanlan.zhihu.com/p/71897251
3.数据使用中需要注意数据转换,jedis与RedisTemplate 不同,RedisTemplate通过不同的Operations可以操作不同的数据类型,直接放入即可,只需在配置中设置好序列化规则,RedisTemplate 配置如下:
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate redisTem(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate=new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(keySerializer());
redisTemplate.setValueSerializer(valueSerializer());
redisTemplate.setHashKeySerializer(hashKeySerializer());
redisTemplate.setHashValueSerializer(valueSerializer());
redisTemplate.setDefaultSerializer(valueSerializer());
redisTemplate.setEnableDefaultSerializer(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
private RedisSerializer keySerializer() {
return new StringRedisSerializer();
}
private RedisSerializer hashKeySerializer() {
return new LongRedisSerializer();
}
private RedisSerializer valueSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}
Jedis处理数据类型转换时我用到了objectMapper,主要用到了writeAsString以及readValue, 具体使用参考:
https://www.baeldung.com/jackson-object-mapper-tutorial
如何使用jedis操作数据可参考:
https://www.baeldung.com/jedis-java-redis-client-library
4.Jedis 开通pipeline:
Pipeline pipeline = RedisClient.getJedis().pipelined();
loop pipeline.dosomething...
pipeline.sync();//执行并关闭
这里Pipeline 并非原子操作,需注意。
5.登录redis控制台后,操作数据的指令操作参考:
https://www.runoob.com/redis/redis-commands.html
6.注意如果指定了jedis的版本,可能跟本身的spring data相冲突,需要选择匹配的版本。
spring-data-redis版本jedis版本
2.1.x 2.9.x
2.2.x 3.x
参考:https://www.pianshen.com/article/75421085900/
遗留问题:
1.并未handle jedis pool 或者执行后release connection,也没有在配置文件中配置这个,暂时完全交给容器做。
2.当redisTemplate和Jedis并存的时候,通过redisTemplate竟然也能处理redis服务中的数据,只是如果随之再想使用jedis,会发现jedis被关闭了。其实原来是想能否不通过Jedis连接以及改写操作数据的方式,直接使用redisTemplate访问ssl开通的端口,但是未果。但是从这个发现来看,也许可行,至少我还可以用jedis连接Azure,但是操作数据仍然保留redisTemplate 的处理,猜测暂未被证实。很大程度上可行,参考:
https://www.baeldung.com/spring-data-redis-tutorial
更多参考: https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis:connectors:jedis
网友评论