新科展教育

                                          新科展教育

                                          ┃ 新科展教育 > 新闻热点 >

                                          RedisTemplate乱码问题

                                          redis是1个key-value保存体系。战Memcached近似,它扶助保存的value榜样绝对更多,包含string(字符串)、list(链表)、set(集中)、zset(sorted set --有序集中)战hash(哈希典型)。那些数据规范皆扶助push/pop、add/remove及与交加并散战好散及更丰饶的操纵,并且那些操纵皆是本子性的。正在此底子上,redis增援种种没有共体例的排序。取memcached一致,为了保护服从,数据皆是慢保存内乱存中。差别的是redis会周期性的把革新的数据写进磁盘大概把修正操纵写进逃添的记载文献,而且正在此底子上实行了master-slave(主从)共步。

                                          Redis 是1个下机能的key-value数据库。 redis的呈现,很年夜水平赔偿了memcached那类key/value保存的缺乏,正在部 分园地能够对于关连数据库起到很佳的弥补感化。它供给了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,应用很便利。

                                          原来那是正在处理1个名目题目是涌现的,由于本开辟者的年夜意,形成了体系呈现宽沉的逻辑题目。

                                          原因体系体系采纳分模块开辟,某模块应用Spring供给的RedisTemplate停止值的读写,另外一位应用了框架鉴于Jedis的1套公用办法停止值的读写,呈现的题目便是写进的值,前面读与没有到从而停止了无值判定逻辑。

                                          那末是读与没有到吗,尔应用RDM客户端检查,创造呈现了1堆键值皆是治码的内乱容

                                          redis乱码.jpg

                                          由于是曾经成型的体系,因此尔一向正在思疑是逻辑题目,并几次走断面挨印停止尝试,创造前面便是读与没有到值,后呈现呈现治码,料想大概那便是题目地点。

                                          停止查抄了题目模块对待RedisTemplate的应用战起他模块的差别,浮现正在应用时,不编写序列化处置的摆设类。

                                          因为RedisTemplate默许应用了JdkSerializationRedisSerializer停止键值对于的序列化,因而应用没有共序列化对象的二个模块战RDM客户端,正在应用时生存了相反。

                                          redis序列化.jpg

                                          如上,源码中的键值序列化是能够设备的,尔们只须要建设其应用的序列化对象便可。

                                          尔们从整最先道,起首POM引进对于Redis的依靠,和毗连池的包,战序列化对象。

                                          <!--默许引进lettuce依靠--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--Lettuce须要应用commons-pool2创造Redis毗连池--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><!--序列化对象,应用SpringMVC时无需引进,曾经自带--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

                                          而后尔们须要正在YAML建设文献增进Reids摆设

                                          spring:redis:host:127.0.0.1port:6379client-name:portalpassword:l52u27lv1Jurlettuce:pool:max-idle:10max-active:20min-idle:2max-wait:5000msdatabase:0

                                          而后编写序列化对象设置类

                                          packagecom.example.springboot.config;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;importorg.springframework.data.redis.serializer.StringRedisSerializer;@ConfigurationpublicclassRedisConfig{@BeanpublicRedisTemplateredisTemplate(RedisConnectionFactoryredisConnectionFactory){RedisTemplateredisTemplate=newRedisTemplate();redisTemplate.setConnectionFactory(redisConnectionFactory);Jackson2JsonRedisSerializerjackson2JsonRedisSerializer=newJackson2JsonRedisSerializer(Object.class);ObjectMapperobjectMapper=newObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);//中心正在那4止代码redisTemplate.setKeySerializer(newStringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(newStringRedisSerializer());redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();returnredisTemplate;}}

                                          末了停止尝试

                                          packagecom.example.springboot;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.data.redis.core.RedisTemplate;@SpringBootTestpublicclassRedisTest{@AutowiredprivateRedisTemplateredisTemplate;@TestpublicvoidstrTest(){redisTemplate.opsForValue().set("name:10001","Java小强");System.out.println(redisTemplate.opsForValue().get("name:10001"));}}

                                          再应用RDM检查数据

                                          redistemplate乱码.jpg

                                          END

                                          推举您浏览更多相关于“ 治码redisspringbootRedisTemplate序列化 ”的作品

                                          电话咨询 联系我们 在线沟通 查看地图