前几天有人在我的博文中留言,询问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>
分享到:
相关推荐
而Spring Data Redis是Spring Framework的一个模块,专门用于简化与Redis键值存储系统的交互。Redis是一个高性能的、开源的、支持网络的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 在...
在处理数据序列化方面,Spring-data-redis允许自定义Serializer,如使用Jackson2JsonRedisSerializer进行JSON序列化。源码中,DefaultRedisSerializer类实现了这一功能,通过反射和反序列化技术,将Java对象与Redis...
在IT行业中,Redis和Jedis是两个非常重要的组件,它们在大数据处理、缓存管理和...在实际项目中,还需要考虑诸如数据一致性、缓存策略、性能优化等更深层次的问题,以便更好地利用Redis和Spring Data Redis的优势。
Spring Data Redis支持多种序列化策略,如JdkSerializationRedisSerializer、StringRedisSerializer和JsonRedisSerializer,可根据实际需求选择合适的序列化方式。 4. **事务支持**:Redis支持单个命令的原子性,...
默认情况下,Spring Data Redis使用JdkSerializationRedisSerializer进行对象的序列化和反序列化。但为了性能考虑,可以自定义Serializer,如使用Jackson2JsonRedisSerializer处理JSON格式的数据,或者使用...
9. **数据类型转换**:Spring Data Redis 自动处理 Java 对象与 Redis 值之间的转换,通过序列化器(Serializer)进行对象到字节流的转换,确保数据的正确存储和读取。 10. **集成测试**:Spring Data Redis 提供了...
《Spring Data Redis 1.0.1:解锁Redis在Java应用中的强大潜力》 Spring Data Redis是Spring框架的一个重要组成部分,它为Java开发者提供了一种简单而强大的方式来利用Redis这个高性能的键值数据存储系统。Spring ...
源码分析可以帮助我们更好地理解如何实现自定义序列化器、连接池配置、以及如何利用Redis Sentinel或Cluster进行高可用性部署。 同时,这个版本还可能包含了一些性能优化和bug修复。例如,可能针对某些特定操作的...
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...
3. **序列化与反序列化策略**:Spring-data-redis提供了多种序列化策略,如`JdkSerializationRedisSerializer`用于序列化Java对象,`StringRedisSerializer`用于处理String类型,以及`JacksonJsonRedisSerializer`,...
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,...
SpringData与Redis集成是现代Java应用中常见的数据存储和缓存解决方案。SpringData是一个强大的框架,它简化了数据库访问,并提供了对多种数据存储技术的统一API。而Redis是一款开源、高性能的键值对数据存储系统,...
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是一个强大的Java库,它为Spring框架提供对Redis数据存储的支持。Spring Data Redis使得在应用程序中集成Redis变得简单,提供了丰富的API和抽象层,让开发者能够利用Redis的高速缓存、持久化和...
Spring Data Redis是Spring社区对Redis键值存储的一个高效、便利的集成框架。其目的是简化Redis数据访问层(Repository层)的开发工作,同时保留对Redis本身API的透明性。Spring Data Redis允许用户利用Spring框架中...
Redis 集成 Spring 的示例代码(spring-data-redis) spring-data-redis 是 Spring大家族的一部分,提供了在 Spring 应用...在使用 spring-data-redis 时,需要注意选择合适的序列化策略,以满足不同的应用场景需求。
// 自定义序列化方式等配置 return template; } } ``` 6. **编写 Redis 操作代码** 可以通过 `@Autowired` 注解注入 RedisTemplate,并使用它进行数据的存取操作。例如,存储一个键值对: ```java @...
这个启动器通常包含对`spring-data-redis`库的依赖,提供了一套完整的Redis操作API,包括连接池管理、序列化策略以及事务支持等。 二、集成步骤 1. 添加依赖:在项目的`pom.xml`或`build.gradle`文件中,添加`...
使用springboot整合redis,使用默认的序列化配置,然后使用redis-client去查询时查询不到相应的key.问题出在哪,怎么解决呢?下面小编给大家带来了springboot整合spring-data-redis遇到的坑,需要的的朋友参考下吧