衔接上篇文章 :Spring Boot 项目集成 Swagger 实例文档
StringRedisTemplate和RedisTemplate的区别:
- 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据
序列化方式不同 RedisTemplate使用的是JdkSerializationRedisSerializer 存入数据会将数据先序列化成字节数组然后在存入Redis数据库 StringRedisTemplate使用的是StringRedisSerializer
StringRedisTemplate主要用来存储字符串,StringRedisSerializer的泛型指定的是String。当存入对象时,会报错 :can not cast into String 可见性强,更易维护。如果都是字符串存储可考虑用StringRedisTemplate
RedisTemplate可以用来存储对象,但是要实现Serializable接口,以二进制数组方式存储,内容没有可读性 若要有可读性则 方案一:手动转化成json串再存储,取出数据需要反序列化 方案二:使用其他序列化方式
了解 Redis 并在 Spring Boot 项目中使用 Redis
Spring中使用RedisTemplate操作Redis
RedisTemplate常用方法总结
RedisTemplate map集合使用说明-opsForHash(三)
Redis中的一个异常:Cannot get Jedis connection
redis修改密码不生效问题
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; } }
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>
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>
linux环境下redis.conf配置文件修改:
用到的命令:
编辑文件 vim redis.conf 关键字搜索 /关键字 键入 n 查找下一出 修改 键入 i 退出 键入 esc 保存 :wq 不保存 :q!
配置连接密码:
requirepass root
启用守护进程:
daemonize yes
取消保护模式:
protected-mode no
注释掉
bind 127.0.0.1 关闭只能本机访问的限制:
#bind 127.0.0.1
防火墙配置 开放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
修改完配置文件 记得重启服务 :!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
./redis-server ./redis.conf
redis配置范例:
有个问题:springboot 2.x版本中默认客户端是用
lettuce
实现的 ,若将配置文件中的jedis 替换为lettuce则项目启动报错
springboot系列文章之 集成redis 服务 (Lettuce & Jedis)
- application.properties中配置Redis连接信息
# 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
测试redis存储对象
打印结果:People(name=ww, address=ee)----------------------{name=jack, class=1, age=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"));
关于redis集群:
Redis 集群教程