前言:
因为同事硬件 不按照规矩来,造成了错误数据,清算不认 没办法,只能重新手动上传一遍 不认的数据, 把他的格式修改正确
因为我们是redis去重,所以我得去把存入的key给删除掉!重新上传一遍 已经上传过的数据了!
Redis简单的指令操作
由于某种原因,只能在linux上面登录 redis 然后使用指令删除 指定key!!!
第一步:
在你安装的redis bin目录下面执行 这个命令
./redis-cli -h 127.0.0.1 -p 6379 -a 密码
select 0 选择对应的库
get key 获取指定key
keys *key 模糊搜索key
Del key 删除指定key
细心的小伙伴可以发现一个问题,就是发现这个key 前缀 怎么会有一堆奇怪之字符呢?
iRedisHelper.hasKey(onlySign) 返回false? iRedisHelper.set(key,key,l,TimeUnit.DAYS) 前缀乱码?linux get 不到key值?
我们梳理业务组合出key,通过redis-cli尝试get key是获取不到结果的,此时我们可以根据上面规则自己生成“乱码前缀”,通过get “乱码前缀”+key 就可以判断缓存值是否存在了。
或者模糊查询key
keys *key
深入了解redis 序列化?
出现前缀奇怪字符原因:
iRedisHelper.set(key,key,l,TimeUnit.DAYS)
在使用set key值的时候,出现序列化相关的问题,就会产生 key前缀 乱码, 如何解决呢?
出现该问题的原因是,同一个应用包中的redis template之前为向redis存放使用java对象序列化的值,序列化方式和string的一般方式不同。
解决方法:
出现该问题的原因是,同一个应用包中的redis template之前为向redis存放使用java对象序列化的值,序列化方式和string的一般方式不同。
解决的办法,兼容原来的功能,重新配置一个redis template客户端实例,设定value的序列化方式为org.springframework.data.redis.serializer.StringRedisSerializer
@Bean("redisStringTemplate")
public RedisTemplate<Object, Object> redisStringTemplate(RedisConnectionFactory factory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
原文链接:https://blog.csdn.net/bestree007/article/details/100103117
上面这个 redis Bean的的引用:
/**
* 注入的redisTemplate
*/
@Resource(name = "redisStringTemplate")
private RedisTemplate<String, String> redisTemplate;
在redis配置中配置序列化
<bean id="redisTemplate_xxxx" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
</bean>
方法2:
/**
* 解决 使用redisTemplate 存储后的键出现 \x 十六进制编码
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer);
redisTemplate.setEnableDefaultSerializer(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
我的项目出现前缀乱码?如何解决的?
我set 进redis 里面了 但是前缀乱码, 我是用 keys *key 获取到指定的key的
但是我hasKey 在查重的时候 能顺利去重!!!
于是我就查看了 对应hashKey 下面的方法! 发现了
keySerializer.serialize(key);
我猜测 这个东西 已经做了 反序列化了, 把redis 里面有乱码前缀的key 正常展示 获取了!
反正我的hashKey 能正常获取 流泪!!!
可以看看的地址:
根据key查询redis中是否存在key对应的value,根据key获取值 - 周文豪 - 博客园
RedisTemplate的key默认序列化器问题_skymouse2002的专栏-CSDN博客_redistemplate默认序列化方式