使用stringRedisTemplate操作redis hash结构数据只能存储String类型的问题
2018-02-03 10:34
996 查看
最近在学习redis,但是在使用stringRedisTemplate模板的时候发现只能存储string的类型。
private StringRedisTemplate stringRedisTemplate;
我想要存储UserPO 类型的对象但是发现报错了:
但是我在这里明明使用的是泛型 , 规定只能存储UserPO类型的啊,居然报错了,真的让人费解啊。你可能马上想到我把它format成String不行了吗?
这样是可以存进去,但是取出的json list中的对象都是UserPO的String类型,显然这不是我们要得json。
经过一番努力后发现StringRedisTemplate类的构造函数是这样的
原来在使用StringRedisSerializer 操作redis数据类型的时候必须要set相对应的序列化,这里源码是默认的String,所以我要更改它默认的序列化
加上这行代码:
再看看效果:
已经存进去了,希望对你们有帮助。
private StringRedisTemplate stringRedisTemplate;
@Autowired(required = false) public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) { this.stringRedisTemplate = stringRedisTemplate; } @Override public void saveUserPO(UserPO user) { BoundHashOperations<String, String, UserPO> ops = stringRedisTemplate .boundHashOps(CommonConstants.USER); ops.put(user.getUserId(), user); }
我想要存储UserPO 类型的对象但是发现报错了:
但是我在这里明明使用的是泛型 , 规定只能存储UserPO类型的啊,居然报错了,真的让人费解啊。你可能马上想到我把它format成String不行了吗?
@Override public void saveUserPO(UserPO user) { BoundHashOperations<String, String, String> ops = stringRedisTemplate .boundHashOps(CommonConstants.USER); ops.put(user.getUserId(), JSON.toJSONString(user)); }
这样是可以存进去,但是取出的json list中的对象都是UserPO的String类型,显然这不是我们要得json。
经过一番努力后发现StringRedisTemplate类的构造函数是这样的
public StringRedisTemplate() { StringRedisSerializer stringSerializer = new StringRedisSerializer(); this.setKeySerializer(stringSerializer); this.setValueSerializer(stringSerializer); this.setHashKeySerializer(stringSerializer); this.setHashValueSerializer(stringSerializer); }
原来在使用StringRedisSerializer 操作redis数据类型的时候必须要set相对应的序列化,这里源码是默认的String,所以我要更改它默认的序列化
@Autowired(required = false) public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) { stringRedisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(UserPO.class)); this.stringRedisTemplate = stringRedisTemplate; }
加上这行代码:
stringRedisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(UserPO.class));
再看看效果:
已经存进去了,希望对你们有帮助。
相关文章推荐
- StringRedisTemplate操作redis数据
- spring redisTemplate 持久化到redis中数据更改为String类型
- NoSQL之Redis(二)---Java操作Redis存储自定义类型数据
- C++类中包含string类型数据使用read和write实现文件读取和输出时遇到的问题
- jedis与spring整合及简单的使用RedisTemplate操作
- Redis之(二)数据类型及存储结构
- redis 数据类型(一)string的使用
- redis 的使用 (基础, key操作, string类型操作)
- Jedis-单独使用demo(包括redis五种数据类型常见操作)
- 解决Spring Boot 使用RedisTemplate 存储键值出现乱码 \xac\xed\x00\x05t\x00
- Redis---String数据类型的操作
- StringRedisTemplate常用操作
- redis:string数据类型与操作
- 使用结构体存储多变量类型数据
- Redis常用数据类型介绍、使用场景及其操作命令
- NoSQL之Redis对string数据类型的操作
- 7、redis之使用spring集成commons-pool来操作常见数据类型
- Redis数据类型操作(一) —— String
- (Redis_学习一)Redis关于string类型和hash类型数据操作
- redis 数据类型(一)string的使用