美文网首页
迁移Azure过程中redis的更改

迁移Azure过程中redis的更改

作者: 暗夜行者 | 来源:发表于2020-09-18 14:08 被阅读0次

1.Azure 本身提供了Azure Cache for Redis 的服务,如使用数据库一样,直接创建可用。

2.如何在spring boot中配置azure redis 可参考:

https://docs.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-initializer-java-app-with-redis-cache

有一点需要注意,分两种连接方式,一种是未开通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

相关文章

网友评论

      本文标题:迁移Azure过程中redis的更改

      本文链接:https://www.haomeiwen.com/subject/ubcjyktx.html