spring data redis hash存储问题

盲人摸象 发布于 2015/06/15 11:51
阅读 3K+
收藏 1

请问一下大家在使用redis的时候,客户端使用jedis,然后使用spring-data-redis集成,用redisTemplate的时候存储一条数据中中的一条数据大家是怎么存的?

spring-data-redis提供了三种常用的序列化方式,jacksonJsonRedisSerializer、jdkSerializationRedisSerializer、StringRedisSeriazalizer    但是这几种方式都是将对象序列化成字符串后存入到redis的,这种方式不好的地方在于如果我想改变一个对象中的其中一个属性的值,我就不得不将整个对象取出来后反序列化成一个对象,这样的方式不是我想要的,如果只是将redis当做缓存来做的话,这种方式还是很好的,但是我个人觉得这种方式去使用redis的话其实并没有真正意义上的使用到redis的多种value存储类型的特性。

我现在的做法是,一个对象直接通过默认的序列话方式jdkSerializationRedisSerializer将一个对象序列话到数据库中,网上有很多的例子是取出对象的每一个属性单独序列化后放到map中然后再使用connection.hmset的方式存入到redis中的,这里想说的是spring-data-redis已经帮我做了将对象转换成map后并序列化的操作了。BeanUtilsHashMapper、DecoratingStringHashMapper、JacksonHashMapper。其中我最后选择了JacksonHashMapper。这样的话在序列化到redis中只需要执行tohash,然后从数据库中取数据的话只需要使用fromHash的方法就可以了。这里就给出具体的实例了。

最后想问的是,大家都是怎样使用redis的hash存储的。

还有如何使用redisTemplate.executePipelined方法从redis中取出对象列表。

以下是问题补充:

@盲人摸象:已经成功从管道中获取Map对象结果集,然后将得到的结果集遍历一次成功的通过jacksonHashMapper将map对象序列化成实体对象。 (2015/06/15 14:12)
加载中
0
南湖船老大
南湖船老大

我只用了jedis,spring-data-redis有点复杂了,不过一时难于取舍。

我觉得序列化为json更好点,其他语言或管理工具管理起来更直观。

盲人摸象
盲人摸象
把对象序列化成json存到redis?
0
alexgaoyh
alexgaoyh

对象数据的话,序列化存入,其余集合性质的,只存主键id。

没有使用spring-data-redis,redisTemplate感觉并不如单纯使用jedis好用。

盲人摸象
盲人摸象
对象数据存入的话不好的地方就是如果想更改某一个属性,就必须将整个对象都反序列化成对象再更新然后再反序列化到redis中,挺不好。上面的问题我都解决了,hash存的是数据库中的一条数据,属性字段为hashkey 字段值为hashvalue。redis中对应的一个key就是User:1 代表的是User表中的id为1的一条数据。
0
alexgaoyh
alexgaoyh

如果不想存入json格式的对象,可以参考 http://my.oschina.net/alexgaoyh/blog/424741


jedis.set("user:" + userId+ ":name", name);
jedis.set("user:" + userId+ ":age", age);

这样的话,针对 user:1 的对象,就将他下面的所有属性存入一个key中,实现与关系型数据库相关的功能操作。

仅供参考,具体的实现的话,还是根据具体业务实现。


盲人摸象
盲人摸象
回复 @alexgaoyh : 用起来复杂,但是提供的很多操作也更方便。
alexgaoyh
alexgaoyh
回复 @板凳儿 : 噢啦··好的,我这边之前觉得使用redisTemplate不相对有些复杂化了,就没有使用它。
盲人摸象
盲人摸象
看了下你的博文,建议不要你那样写。一个对象拆开属性后去hmset操作,其实你只需要给一个map就可以直接完事了,给map的话jedis应该也给了实现,就是我上面说的,jacksonHashmapper的方式,这种方式还帮你把对象的每一个属性都序列化了,当然你可以可以自己手动序列化每一个属性然后放到map中然后hmset到redis中。有兴趣的话我可以把我写的代码给你看看。
返回顶部
顶部