《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(serializer);
//template.setValueSerializer(serializer);
template.setHashKeySerializer(serializer);
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(factory);
return stringRedisTemplate;
}
集群
==
但是随着项目的深入问题还是会出现。单机的最大问题就是如果redis服务因为意外情况发生宕机,那么我们的程序也会被牵连,这造成我们服务直接不可用。
基于这种情况redis集群应运而生。集群好处就是我们不需要担心服务宕机,应为每个节点都是单独服务部署。其中一台宕机其它的会重新进行选举和数据容灾操作。对于我们使用者而言不需要担心宕机的问题了。
还有就是数据,在redis集群中存在主节点和从节点。主节点负责写入数据,从节点负责同步数据。集群内部的数据同步让我们避免了数据丢失的情况。
在单机配置中,能够发现我们在配置RedisTemplate的时候需要RedisConnectionFactory工厂。关于这个工厂没有再上面配置,主要原因是在集群中我们需要改造他。所以就放在集群章节一起配置了。
关于工厂的配置我们主要是配置JedisConnectionFactory
。 点源码我们能够看到一个方法
public JedisConnectionFactory(RedisClusterConfiguration clusterConfig) {
this((RedisClusterConfiguration)clusterConfig, (JedisClientConfiguration)(new JedisConnectionFactory.MutableJedisClientConfiguration()));
}
所以集群配置我们只需要构造RedisClusterConfiguration对象就可以。 如果是单机我们就使用无参构造
@Bean
public JedisConnectionFactory getRedisConnectionFactory() throws CommonException {
JedisConnectionFactory connectionFactory = null;
if (connectionFactory == null && redisProperties != null && redisProperties.getHost() != null) {
// 单机
connectionFactory = new JedisConnectionFactory();
}
if (connectionFactory == null && redisProperties != null && redisProperties.getCluster().getNodes() != null) {
// 集群
connectionFactory = new JedisConnectionFactory(getClusterConfig());
}
if (null == connectionFactory) {
throw new CommonException(“无法初始化redis连接池”);
}
try {
connectionFactory.setUsePool(true);
JedisPoolConfig config = getJedisPoolConfig();
connectionFactory.setPoolConfig(config);
connectionFactory.setHostName(redisProperties.getHost());
connectionFactory.setPort(redisProperties.getPort());
connectionFactory.setDatabase(redisProperties.getDatabase());
connectionFactory.setPassword(redisProperties.getPassword());
} catch (Exception e) {
logger.error(“redis connection factory init failed”);
}
return connectionFactory;
}
写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
图
[外链图片转存中…(img-TTV1RGMq-1714668740754)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!