一、预期
接上一篇,扩充User属性:
-
publicclassUserimplementsSerializable{
-
privatestaticfinallongserialVersionUID=-1267719235225203410L;
-
-
privateStringuid;
-
-
privateStringaddress;
-
-
privateStringmobile;
-
-
privateStringpostCode;
-
}
我期望的是:
redis 127.0.0.1:6379> hmget uc.user.info.uid.u123456 address mobile postCode
1) "\xe4\xb8\x8a\xe6\xb5\xb7"
2) "13800138000"
3) "100859"
几乎就是一个对象了!
但是,接下来的代码实现,让我彻底崩溃了!
二、代码实现
1.保存——HMSET
-
@Override
-
publicvoidsave(finalUseruser){
-
redisTemplate.execute(newRedisCallback<Object>(){
-
@Override
-
publicObjectdoInRedis(RedisConnectionconnection)
-
throwsDataAccessException{
-
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());
-
returnnull;
-
}
-
});
-
}
这里用到:
-
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());
这时候就完成了哈希表的保存操作,可以在控制台看到相应的数据了。
redis 127.0.0.1:6379> hmget uc.user.info.uid.u123456 address mobile postCode
1) "\xe4\xb8\x8a\xe6\xb5\xb7"
2) "13800138000"
3) "100859"
2.获取——HMGET
这一刻,我彻底崩溃了!取出来的值是个List,还得根据取得顺序,逐个反序列化,得到内容。
-
@Override
-
publicUserread(finalStringuid){
-
returnredisTemplate.execute(newRedisCallback<User>(){
-
@Override
-
publicUserdoInRedis(RedisConnectionconnection)
-
throwsDataAccessException{
-
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"));
-
Useruser=newUser();
-
Stringaddress=redisTemplate.getStringSerializer()
-
.deserialize(value.get(0));
-
user.setAddress(address);
-
Stringmobile=redisTemplate.getStringSerializer()
-
.deserialize(value.get(1));
-
user.setMobile(mobile);
-
StringpostCode=redisTemplate.getStringSerializer()
-
.deserialize(value.get(2));
-
user.setPostCode(postCode);
-
user.setUid(uid);
-
-
returnuser;
-
}
-
returnnull;
-
}
-
});
-
}
这个实现,跟Redis的命令几乎一模一样,指定Key,指定field,获取其值。
-
List<byte[]>value=connection.hMGet(key,redisTemplate.getStringSerializer().serialize("address"),
-
redisTemplate.getStringSerializer().serialize("mobile"),
-
redisTemplate.getStringSerializer().serialize("postCode"));
我绝对相信,要么是我用的过于肤浅,低估了Spring的封装能力。或者,我该直接Json!等等,这不是MongoDB干的事情吗?!
PS:这两篇博客里操作的数据类型,只能是String类型,还没搞定除此以外任何类型。吾将上下而求索~~~
上述操作也许你吐了,接下来的代码,就再吐一次吧!
封装对象的时候,一定要记得次序。。。。这绝对不是一个优质代码的实现风格!
-
Useruser=newUser();
-
Stringaddress=redisTemplate.getStringSerializer().deserialize(value.get(0));
-
user.setAddress(address);
-
Stringmobile=redisTemplate.getStringSerializer().deserialize(value.get(1));
-
user.setMobile(mobile);
-
StringpostCode=redisTemplate.getStringSerializer().deserialize(value.get(2));
-
user.setPostCode(postCode);
好吧!苦逼的事情,就此结束。目标Json支持!
分享到:
相关推荐
NULL 博文链接:https://snowolf.iteye.com/blog/1824868
Redis Windows32位+64位安装包,Linux压缩包, Redis图形操作管理软件,Jedis
Redis+Jedis+案例实战(高清视频教程).rar
NULL 博文链接:https://snowolf.iteye.com/blog/1633196
redis3.2.1+jedis2.5+jedis.api一站下载
SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含分类、sku、运费模板、素材库、小程序直播、拼团、砍价、商户管理、 秒杀、优惠券、积分、分销、会员、充值、多门店等功能,更...
SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含分类、sku、运费模板、素材库、小程序直播、拼团、砍价、商户管理、 秒杀、优惠券、积分、分销、会员、充值、多门店等功能,更...
里面包含了spring-data-redis-1.3.4.RELEASE.jar ,但是jedis可以不用,用spring-data-redis方式的同学可以使用
Springboot+SpringSecurity+SpringSession+Redis+Mybatis-Plus+Swwager
redis3.2.1+jedis2.8.0+jedis.api.rar一站下载
基于maven+springmvc+redis+mybatis整合案例框架,主要实现redis的读取案例
redis2.8windows64位版本+jedis2.5jar+jedis英文api
Redis+Jedis安装与使用(一)-附件资源
Springboot+Redis+Dubbo+Rocketmq Springboot+Redis+Dubbo+Rocketmq Springboot+Redis+Dubbo+Rocketmq
vue+springboot+redis+kaptcha实现登录页验证码
大型电商项目实战1:Redis+Rest+Linux+Nginx+Spring+SpringMVC实现JAVA高并发秒杀系统,baidu链接,谢谢
SpringMVC+Redis+MyBatis项目,主要实现Redis注释缓存
Springboot+redis+mybatisplus
Spring boot+redis+rabbitMq实例整合的简单例子,可用来参考学习