首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

征服 Redis + Jedis + Spring (2)—— 哈希表操作(HMGET HMSET)

2012-11-23 
征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)不得不说,用哈希操作来存对象,有点自讨苦吃!

征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)

不得不说,用哈希操作来存对象,有点自讨苦吃!征服 Redis + Jedis + Spring (2)—— 哈希表操作(HMGET HMSET)

不过,既然吃了苦,也做个记录,也许以后API升级后,能好用些呢?!

或许,是我的理解不对,没有真正的理解哈希表。

?

?

相关链接:

征服 Redis

征服 Redis + Jedis

征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)

?

一、预期

接上一篇,扩充User属性:

?

public class User implements Serializable {private static final long serialVersionUID = -1267719235225203410L;private String uid;private String address;private String mobile;private String postCode;}

?我期望的是:?

?

?

?

但是,接下来的代码实现,让我彻底崩溃了!征服 Redis + Jedis + Spring (2)—— 哈希表操作(HMGET HMSET)

?

二、代码实现1.保存——HMSET

?

@Overridepublic void save(final User user) {redisTemplate.execute(new RedisCallback<Object>() {@Overridepublic Object doInRedis(RedisConnection connection)throws DataAccessException {byte[] key = redisTemplate.getStringSerializer().serialize("uc.user.info.uid." + user.getUid());BoundHashOperations<Serializable, byte[], byte[]> boundHashOperations = redisTemplate.boundHashOps(key);boundHashOperations.put(redisTemplate.getStringSerializer().serialize("mobile"), redisTemplate.getStringSerializer().serialize(user.getMobile()));boundHashOperations.put(redisTemplate.getStringSerializer().serialize("address"), redisTemplate.getStringSerializer().serialize(user.getAddress()));boundHashOperations.put(redisTemplate.getStringSerializer().serialize("postCode"), redisTemplate.getStringSerializer().serialize(user.getPostCode()));connection.hMSet(key, boundHashOperations.entries());return null;}});}
?

?

这里用到:

?

BoundHashOperations<Serializable, byte[], byte[]> boundHashOperations = redisTemplate.boundHashOps(key);boundHashOperations.put(redisTemplate.getStringSerializer().serialize("mobile"), redisTemplate.getStringSerializer().serialize(user.getMobile()));

?看着就有点肿。。。Map封装完以后,用HMSET命令:

?

connection.hMSet(key, boundHashOperations.entries());

?这时候就完成了哈希表的保存操作,可以在控制台看到相应的数据了。

?

@Overridepublic User read(final String uid) {return redisTemplate.execute(new RedisCallback<User>() {@Overridepublic User doInRedis(RedisConnection connection)throws DataAccessException {byte[] key = redisTemplate.getStringSerializer().serialize("uc.user.info.uid." + uid);if (connection.exists(key)) {List<byte[]> value = connection.hMGet(key,redisTemplate.getStringSerializer().serialize("address"),redisTemplate.getStringSerializer().serialize("mobile"), redisTemplate.getStringSerializer().serialize("postCode"));User user = new User();String address = redisTemplate.getStringSerializer().deserialize(value.get(0));user.setAddress(address);String mobile = redisTemplate.getStringSerializer().deserialize(value.get(1));user.setMobile(mobile);String postCode = redisTemplate.getStringSerializer().deserialize(value.get(2));user.setPostCode(postCode);user.setUid(uid);return user;}return null;}});}

?这个实现,跟Redis的命令几乎一模一样,指定Key,指定field,获取其值。

?

List<byte[]> value = connection.hMGet(key,redisTemplate.getStringSerializer().serialize("address"),redisTemplate.getStringSerializer().serialize("mobile"), redisTemplate.getStringSerializer().serialize("postCode"));

?我绝对相信,要么是我用的过于肤浅,低估了Spring的封装能力。或者,我该直接Json!征服 Redis + Jedis + Spring (2)—— 哈希表操作(HMGET HMSET)等等,这不是MongoDB干的事情吗?!

PS:这两篇博客里操作的数据类型,只能是String类型,还没搞定除此以外任何类型。吾将上下而求索~~~

上述操作也许你吐了,接下来的代码,就再吐一次吧!

封装对象的时候,一定要记得次序。。。。这绝对不是一个优质代码的实现风格!

?

User user = new User();String address = redisTemplate.getStringSerializer().deserialize(value.get(0));user.setAddress(address);String mobile = redisTemplate.getStringSerializer().deserialize(value.get(1));user.setMobile(mobile);String postCode = redisTemplate.getStringSerializer().deserialize(value.get(2));user.setPostCode(postCode);

?好吧!苦逼的事情,就此结束。目标Json支持!征服 Redis + Jedis + Spring (2)—— 哈希表操作(HMGET HMSET)

未完待续~

?

?


相关链接:

征服 Redis

征服 Redis + Jedis

征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)

1 楼 kuro_0505 2012-09-15   确实很痛苦,这样子太操蛋了~看看有没有好点方法~

热点排行