Continuando com o artigo anterior: documento de exemplo Swagger de integração do projeto Spring Boot
A diferença entre StringRedisTemplate e RedisTemplate:
- Os dados dos dois não são comuns ; ou seja, StringRedisTemplate só pode gerenciar dados em StringRedisTemplate e RedisTemplate só pode gerenciar dados em RedisTemplate
O método de serialização é diferente. RedisTemplate usa JdkSerializationRedisSerializer. Ao armazenar dados, os dados serão serializados em uma matriz de bytes e, em seguida, armazenados no banco de dados Redis. StringRedisTemplate usa StringRedisSerializer.
StringRedisTemplate é usado principalmente para armazenar strings, e o tipo genérico de StringRedisSerializer especifica String. Ao salvar o objeto, ele reportará um erro: não pode ser convertido em String. A visibilidade é forte e mais fácil de manter. Se for todo o armazenamento de string, considere usar StringRedisTemplate
RedisTemplate pode ser usado para armazenar objetos, mas precisa implementar a interface serializável e armazená-la em uma matriz binária. O conteúdo não é legível. Se você quiser ter legibilidade, então Solução 1: converta manualmente em uma string json e armazene de novo. A recuperação dos dados requer a solução de desserialização 2.: Use outros métodos de serialização
Compreenda o Redis e use o Redis em projetos Spring Boot
Use o RedisTemplate para operar o Redis na primavera
Resumo dos métodos comuns do RedisTemplate
Instruções de coleta de mapas RedisTemplate-opsForHash (3)
Uma exceção no Redis: não é possível obter conexão Jedis
A modificação da senha do Redis não tem efeito
configuração do parâmetro redis.conf
redisConfig 类 :
@Configuration public class RedisConfig { @Bean @ConditionalOnMissingBean(name = "redisTemplate") public RedisTemplate<String, Object> redisTemplate( RedisConnectionFactory redisConnectionFactory) { Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); template.setConnectionFactory(redisConnectionFactory); //template.setKeySerializer(jackson2JsonRedisSerializer); template.setKeySerializer(stringRedisSerializer); template.setValueSerializer(jackson2JsonRedisSerializer); //template.setHashKeySerializer(jackson2JsonRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } @Bean @ConditionalOnMissingBean(StringRedisTemplate.class) public StringRedisTemplate stringRedisTemplate( RedisConnectionFactory redisConnectionFactory) { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } }
Versão de configuração XML:
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnFactory"/> <property name="keySerializer"><!--处理KEY乱码问题--> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> </property> <property name="hashKeySerializer"><!--处理KEY乱码问题--> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/> </property> <property name="hashValueSerializer"> <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/> </property> </bean>
dependência redis:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
Modificação do arquivo de configuração redis.conf no ambiente linux:
Comandos usados:
编辑文件 vim redis.conf 关键字搜索 /关键字 键入 n 查找下一出 修改 键入 i 退出 键入 esc 保存 :wq 不保存 :q!
Configure a senha de conexão:
requirepass root
Habilite o daemon:
daemonize yes
Cancelar modo de proteção:
protected-mode no
Comente
bind 127.0.0.1 关闭只能本机访问的限制:
#bind 127.0.0.1
Configuração de firewall Abra a porta 6379:
查看6379防火墙状态 firewall-cmd --zone=public --query-port=6379/tcp 开放端口 firewall-cmd --zone=public --add-port=6379/tcp --permanent 重载 ==>执行此命令 开放端口才能生效 firewall-cmd --reload 再次查看 返回为yes 即表示配置成功 firewall-cmd --zone=public --query-port=6379/tcp
Após modificar o arquivo de configuração, lembre-se de reiniciar o serviço :! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
./redis-server ./redis.conf
Exemplo de configuração do Redis:
Há um problema: o cliente padrão na versão 2.x do springboot é
lettuce
implementado usando, se você substituir jedis no arquivo de configuração porlettuce则项目启动报错
Artigos da série Springboot serviço integrado de redis (Alface e Jedis)
- Configure as informações de conexão do Redis em application.properties
# Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=192.168.200.129 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=root # 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-idle=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.jedis.pool.max-active=5 # 连接池中的最小空闲连接 spring.redis.jedis.pool.min-idle=1 # 连接超时时间(毫秒) spring.redis.timeout=5000
Testar objetos de armazenamento redis
Resultado de impressão: Pessoas (nome = ww, endereço = ee) ---------------------- {nome = jack, classe = 1, idade = 27}
// redisTemplate.setKeySerializer(new StringRedisSerializer()); 设置key的编码 //方式一: redisTemplate.opsForValue().set("p", new People("ww", "ee")); People p = (People) redisTemplate.opsForValue().get("p"); //方式二: Map<String, Object> testMap = new HashMap(); testMap.put("name", "jack"); testMap.put("age", 27); testMap.put("class", "1"); redisTemplate.opsForHash().putAll("hash1", testMap); // System.out.println(p + "----------------------" + redisTemplate.opsForHash().entries("hash1"));
Sobre o cluster redis:
Tutorial de cluster Redis