`
jimgreat
  • 浏览: 132109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring-data-redis 的序列化问题

阅读更多

前几天有人在我的博文中留言,询问spring-data-redis的问题,如下,黑体为我的回答

 

 

我用spring-data-redis 成功的set了 而且也能成功get出来对应的数据~

但是用redis-cli去服务器直接get数据是提示(nil) 这是什么原因啊?

 

正常是get一个不存在的key才会这样的

 

但是我用的是同一个key啊···通过spring-data-redis就可以成功get出来~~

如果我直接用jedis存的话就没有这样的问题·· 大侠解惑啊····

 


我在项目中都是直接用jedis

突然想起spring-data-redis 对 key 和 value 都进行了序列化 变成byte[] 再调用对应的redis java client进行存储的。  那应该就是通过spring-data-redis进入redis的key变了

 

 

今天就这个问题详细分析一下

 

可能我们正常使用redis时 key 和 value 一般都是 string 类型的

但client 和 server 间的协议要求的是 byte   可参看我的另一篇博文 http://jimgreat.iteye.com/blog/1586671

Jedis 提供了 string 和 byte[] 类型的函数接口

 

 

spring-data-redis  中的核心操作类是  RedisTemplate<K, V>

可以看出 key 和 value 都是泛型的,这就涉及到将类型进行序列化的问题了

所就在 RedisTemplate 中还有几个 RedisSerializer

 

 

	private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer();

	private RedisSerializer keySerializer = null;
	private RedisSerializer valueSerializer = null;
	private RedisSerializer hashKeySerializer = null;
	private RedisSerializer hashValueSerializer = null;
	private RedisSerializer<String> stringSerializer = new StringRedisSerializer();
 

如果没有特殊的设置,key 和 value 都是使用 defaultSerializer = new JdkSerializationRedisSerializer(); 进行序列化的。

 

对于 key = "AAAA"  value = "cccc" 的情况, server 端运行的情况如下

 

 "SET" "\xac\xed\x00\x05t\x00\x04AAAA" "\xac\xed\x00\x05t\x00\x04cccc"

 "GET" "\xac\xed\x00\x05t\x00\x04AAAA"

 

如果项目中只使用了string的 key 和 value ,显然这样不适合在sever上进行debug

 

通过下面的配置,可以改成使用StringRedisSerializer对 key 和 value 进行序列化

 

 

  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
    p:connection-factory-ref="jedisConnectionFactory" >
       <property name="KeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <property name="ValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>       
    </bean>

 

这样就能在 server 上找到你原来的 key 了 

 

 "SET" "AAAA" "cccc"

 "GET" "AAAA"

 

对于Hash结构内部的 key 和 value 可以添加如下配置

 

 

        <property name="HashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>  
        <property name="HashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property> 
分享到:
评论
1 楼 jimmys 2016-06-29  
请问spring-data-redis和jedis那种方式比较好

相关推荐

    springMVC集成spring-data-redis

    而Spring Data Redis是Spring Framework的一个模块,专门用于简化与Redis键值存储系统的交互。Redis是一个高性能的、开源的、支持网络的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 在...

    spring-data-redis 1.7.6

    在处理数据序列化方面,Spring-data-redis允许自定义Serializer,如使用Jackson2JsonRedisSerializer进行JSON序列化。源码中,DefaultRedisSerializer类实现了这一功能,通过反射和反序列化技术,将Java对象与Redis...

    spring-data-redis-1.6.0.RELEASE.jar + jedis-2.7.2.jar

    在IT行业中,Redis和Jedis是两个非常重要的组件,它们在大数据处理、缓存管理和...在实际项目中,还需要考虑诸如数据一致性、缓存策略、性能优化等更深层次的问题,以便更好地利用Redis和Spring Data Redis的优势。

    spring-data-redis.jar

    Spring Data Redis支持多种序列化策略,如JdkSerializationRedisSerializer、StringRedisSerializer和JsonRedisSerializer,可根据实际需求选择合适的序列化方式。 4. **事务支持**:Redis支持单个命令的原子性,...

    spring-data-redis-1.7.10.RELEASE jar包

    Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...

    spring-data-redis

    默认情况下,Spring Data Redis使用JdkSerializationRedisSerializer进行对象的序列化和反序列化。但为了性能考虑,可以自定义Serializer,如使用Jackson2JsonRedisSerializer处理JSON格式的数据,或者使用...

    spring-data-redis-1.6.0.RELEASE最新稳定版(个人测试通过)

    9. **数据类型转换**:Spring Data Redis 自动处理 Java 对象与 Redis 值之间的转换,通过序列化器(Serializer)进行对象到字节流的转换,确保数据的正确存储和读取。 10. **集成测试**:Spring Data Redis 提供了...

    spring-data-redis-1.0.1

    《Spring Data Redis 1.0.1:解锁Redis在Java应用中的强大潜力》 Spring Data Redis是Spring框架的一个重要组成部分,它为Java开发者提供了一种简单而强大的方式来利用Redis这个高性能的键值数据存储系统。Spring ...

    spring-data-redis-1.0.2

    源码分析可以帮助我们更好地理解如何实现自定义序列化器、连接池配置、以及如何利用Redis Sentinel或Cluster进行高可用性部署。 同时,这个版本还可能包含了一些性能优化和bug修复。例如,可能针对某些特定操作的...

    Spring-data-redis操作redis知识总结

    3. **序列化与反序列化策略**:Spring-data-redis提供了多种序列化策略,如`JdkSerializationRedisSerializer`用于序列化Java对象,`StringRedisSerializer`用于处理String类型,以及`JacksonJsonRedisSerializer`,...

    spring-data-redis-demo.rar

    Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...

    SpringData与Redis集成

    SpringData与Redis集成是现代Java应用中常见的数据存储和缓存解决方案。SpringData是一个强大的框架,它简化了数据库访问,并提供了对多种数据存储技术的统一API。而Redis是一款开源、高性能的键值对数据存储系统,...

    spring-data-redis-demo

    Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...

    Spring-data-redis使用指南

    ### Spring Data Redis 使用指南知识点详解 #### 一、Spring Data Redis 概览 **Spring Data Redis** 是 **Spring Data** 家族中的一个模块,它为 **Redis** 提供了一套方便的操作接口,使得开发人员可以更加高效...

    spring-data-redis-1.6.0.RELEASE.jar + jedis-2.7.2.jar包

    Spring Data Redis是一个强大的Java库,它为Spring框架提供对Redis数据存储的支持。Spring Data Redis使得在应用程序中集成Redis变得简单,提供了丰富的API和抽象层,让开发者能够利用Redis的高速缓存、持久化和...

    spring-data-redis英文版

    Spring Data Redis是Spring社区对Redis键值存储的一个高效、便利的集成框架。其目的是简化Redis数据访问层(Repository层)的开发工作,同时保留对Redis本身API的透明性。Spring Data Redis允许用户利用Spring框架中...

    Redis 集成Spring的示例代码(spring-data-redis)

    Redis 集成 Spring 的示例代码(spring-data-redis) spring-data-redis 是 Spring大家族的一部分,提供了在 Spring 应用...在使用 spring-data-redis 时,需要注意选择合适的序列化策略,以满足不同的应用场景需求。

    spring-boot2集成redis

    // 自定义序列化方式等配置 return template; } } ``` 6. **编写 Redis 操作代码** 可以通过 `@Autowired` 注解注入 RedisTemplate,并使用它进行数据的存取操作。例如,存储一个键值对: ```java @...

    redis-spring-boot-starter.rar

    这个启动器通常包含对`spring-data-redis`库的依赖,提供了一套完整的Redis操作API,包括连接池管理、序列化策略以及事务支持等。 二、集成步骤 1. 添加依赖:在项目的`pom.xml`或`build.gradle`文件中,添加`...

    spring-data-redis-1.0.4.RELEASE-dist.zip

    此外,还可以配置序列化策略,以确保对象在序列化和反序列化时保持一致。 7. **最佳实践** 在使用Spring Data Redis时,应考虑数据模型设计、内存管理(因为Redis完全在内存中运行)、以及如何利用Redis的特性,如...

Global site tag (gtag.js) - Google Analytics