你知道spring boot项目中yml配置文件中不配置redis的连接信息,启动本地的redis服务,能连接吗?答案是可以连接的的,why?以下给你揭秘。
/**
* RedisTemplate配置
* @param
* @return
*/
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);// 需要配置一下StringSerializer,不然key会乱码 /XX/XX
template.afterPropertiesSet();
return template;
}
/**
* Thread-safe factory of Redis connections.
*
* @author Costin Leau
* @author Christoph Strobl
*/
public interface RedisConnectionFactory extends PersistenceExceptionTranslator {
/**
* Provides a suitable connection for interacting with Redis.
*
* @return connection for interacting with Redis.
*/
RedisConnection getConnection();
/**
* Provides a suitable connection for interacting with Redis Cluster.
*
* @return
* @throws
* @since 1.7
*/
RedisClusterConnection getClusterConnection();
public class JedisConnectionFactory implements InitializingBean, DisposableBean, RedisConnectionFactory {
private final static Log log = LogFactory.getLog(JedisConnectionFactory.class);
private static final ExceptionTranslationStrategy EXCEPTION_TRANSLATION = new PassThroughExceptionTranslationStrategy(
JedisConverters.exceptionConverter());
private static final Method SET_TIMEOUT_METHOD;
private static final Method GET_TIMEOUT_METHOD;
static {
// We need to configure Jedis socket timeout via reflection since the method-name was changed between releases.
Method setTimeoutMethodCandidate = ReflectionUtils.findMethod(JedisShardInfo.class, "setTimeout", int.class);
if (setTimeoutMethodCandidate == null) {
// Jedis V 2.7.x changed the setTimeout method to setSoTimeout
setTimeoutMethodCandidate = ReflectionUtils.findMethod(JedisShardInfo.class, "setSoTimeout", int.class);
}
SET_TIMEOUT_METHOD = setTimeoutMethodCandidate;
Method getTimeoutMethodCandidate = ReflectionUtils.findMethod(JedisShardInfo.class, "getTimeout");
if (getTimeoutMethodCandidate == null) {
getTimeoutMethodCandidate = ReflectionUtils.findMethod(JedisShardInfo.class, "getSoTimeout");
}
GET_TIMEOUT_METHOD = getTimeoutMethodCandidate;
}
private JedisShardInfo shardInfo;
private String hostName = "localhost";
private int port = Protocol.DEFAULT_PORT;
private int timeout = Protocol.DEFAULT_TIMEOUT;
private String password;
private boolean usePool = true;
private boolean useSsl = false;
private Pool<Jedis> pool;
private JedisPoolConfig poolConfig = new JedisPoolConfig();
private int dbIndex = 0;
private String clientName;
private boolean convertPipelineAndTxResults = true;
private RedisSentinelConfiguration sentinelConfig;
private RedisClusterConfiguration clusterConfig;
private JedisCluster cluster;
private ClusterCommandExecutor clusterCommandExecutor;
public final class Protocol {
private static final String ASK_RESPONSE = "ASK";
private static final String MOVED_RESPONSE = "MOVED";
private static final String CLUSTERDOWN_RESPONSE = "CLUSTERDOWN";
private static final String BUSY_RESPONSE = "BUSY";
private static final String NOSCRIPT_RESPONSE = "NOSCRIPT";
public static final String DEFAULT_HOST = "localhost";
public static final int DEFAULT_PORT = 6379;
public static final int DEFAULT_SENTINEL_PORT = 26379;
public static final int DEFAULT_TIMEOUT = 2000;
public static final int DEFAULT_DATABASE = 0;
public static final String CHARSET = "UTF-8";
public static final byte DOLLAR_BYTE = '$';
public static final byte ASTERISK_BYTE = '*';
public static final byte PLUS_BYTE = '+';
public static final byte MINUS_BYTE = '-';
public static final byte COLON_BYTE = ':';
public static final String SENTINEL_MASTERS = "masters";
public static final String SENTINEL_GET_MASTER_ADDR_BY_NAME = "get-master-addr-by-name";
public static final String SENTINEL_RESET = "reset";
public static final String SENTINEL_SLAVES = "slaves";
public static final String SENTINEL_FAILOVER = "failover";
public static final String SENTINEL_MONITOR = "monitor";
public static final String SENTINEL_REMOVE = "remove";
public static final String SENTINEL_SET = "set";
看到没?底层框架就默认连接了private String hostName = "localhost";和
public static final int DEFAULT_PORT = 6379;
分享到:
相关推荐
public RedisTemplate, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate, Object> template = new RedisTemplate(); template.setConnectionFactory(factory); StringRedisSerializer ...
3. 对`RedisTemplate`进行类型转换配置,例如设置序列化器(默认的Java序列化器可能会导致安全问题,一般推荐使用`StringRedisSerializer`或`Jackson2JsonRedisSerializer`)。 接下来,`valueOperations`是`...
此外,Spring还支持使用`RedisTemplate`进行更底层的操作,如直接使用命令API执行操作。这在处理特殊需求或复杂操作时非常有用。 总结来说,Spring与Redis的整合主要涉及以下几个步骤: 1. 添加Spring Data Redis和...
这里,我们为`value`和`hashValue`设置了Fastjson序列化器,而`key`和`hashKey`使用了默认的`StringRedisSerializer`,因为Redis的key通常为字符串。 **3. 示例实体类** 为了演示序列化和反序列化的效果,我们可以...
public RedisTemplate, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate, Object> template = new RedisTemplate(); template.setConnectionFactory(connectionFactory); // ...
- **RedisTemplate**: 这是Spring Data Redis的核心组件,提供了操作Redis的模板方法,如设置和获取键值、执行命令等。 - **RedisConnectionFactory**: 该接口定义了创建连接到Redis服务器的方法,通常通过配置连接...