为什么redisTemplate hash value 无法存成json字符串
时间: 2024-05-11 14:20:03 浏览: 237
RedisTemplate 在操作 hash 类型时,会将 value 值序列化成字节数组,而不是直接存储字符串。这意味着如果你要存储一个 JSON 字符串,需要将其先序列化成字节数组,然后再存入 Redis。
你可以使用如下代码将 JSON 字符串序列化为字节数组:
```java
String json = "{\"name\":\"张三\",\"age\":18}";
byte[] jsonBytes = json.getBytes(StandardCharsets.UTF_8);
```
然后使用 RedisTemplate 的 `opsForHash()` 方法将其存入 Redis:
```java
redisTemplate.opsForHash().put("myhash", "mykey", jsonBytes);
```
当从 Redis 中读取时,需要将字节数组反序列化成字符串再进行后续操作:
```java
byte[] resultBytes = (byte[]) redisTemplate.opsForHash().get("myhash", "mykey");
String resultJson = new String(resultBytes, StandardCharsets.UTF_8);
```
相关问题
@Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 配置redisTemplate RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置序列化 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); jackson2JsonRedisSerializer.setObjectMapper(om); // key序列化 redisTemplate.setKeySerializer(new StringRedisSerializer()); // value序列化 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // Hash key序列化 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); // Hash value序列化 redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; }
这段代码是用来配置RedisTemplate的,可以看出该RedisTemplate的key和hashKey序列化采用了StringRedisSerializer,而value和hashValue序列化采用了Jackson2JsonRedisSerializer。其中,Jackson2JsonRedisSerializer使用了ObjectMapper来实现Java对象和JSON字符串之间的相互转换。在配置ObjectMapper时,设置了默认可见性为所有属性可见,以及默认的对象类型为非final类型,并且将类型信息作为属性写入JSON字符串中。这些配置可以使得Redis中存储的数据更加直观、易读,并且可以支持更多类型的Java对象。返回的RedisTemplate可以用来进行Redis操作,比如存储、查询等。
nodejs 把一个Obj 转成字符串并 计算字符串的 MD5值 用于判断Obj 是否改变完整代码
在Node.js中,你可以使用`JSON.stringify()`将JavaScript对象转换为字符串,并结合`crypto-js`库来计算MD5哈希。首先,你需要安装`crypto-js`库,可以使用npm命令:
```bash
npm install crypto-js
```
然后,以下是完整的示例代码:
```javascript
const JSONStringify = require('json-stringify-safe');
const CryptoJS = require('crypto-js');
function objToMD5(obj) {
// 将对象转换为字符串并计算MD5
const jsonString = JSONStringify(obj); // 避免JSON.stringify对Circular引用的错误处理
const md5Hash = CryptoJS.MD5(jsonString).toString(); // 使用CryptoJS计算MD5
return md5Hash;
}
// 示例对象
const originalObj = { key: 'value', nested: { deep: 'data' } };
// 比较原始和新对象是否相等
const newObj = ...; // 新的对象
const isObjectChanged = objToMD5(originalObj) !== objToMD5(newObj);
console.log(`Original object MD5: ${objToMD5(originalObj)}`);
console.log(`New object MD5: ${objToMD5(newObj)}`);
阅读全文