ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

重写Redis序列化方式,redis可视化工具不乱码

2022-02-10 15:32:34  阅读:165  来源: 互联网

标签:userId Redis springframework 乱码 org import 序列化 redisTemplate


当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。
Spring Data JPA为我们提供了下面的Serializer:
GenericToStringSerializer、Jackson2JsonRedisSerializer、JacksonJsonRedisSerializer、JdkSerializationRedisSerializer、OxmSerializer、StringRedisSerializer。
我们自己配置RedisTemplate并定义Serializer。

package cxy.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {
    
    @Autowired
    @Qualifier(value = "redisTemplate")
    private RedisTemplate redisTemplate;
    
    @Bean(name = "newRedisTemplate")
    public RedisTemplate<String, RedisCountDo> redisTemplate() {
        
        // 设置序列化
        Jackson2JsonRedisSerializer<RedisCountDo> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(RedisCountDo.class);
        RedisSerializer stringSerializer = new StringRedisSerializer();
        // key序列化
        redisTemplate.setKeySerializer(stringSerializer);
        // value序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // Hash key序列化
        redisTemplate.setHashKeySerializer(stringSerializer);
        // Hash value序列化
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
        
    }
    
}

使用先注入RedisConfig类

    @Autowired
    private RedisConfig redisConfig;

然后使用方法仿照下面

 @Test
    public void redisTest2() {
    
        RedisTemplate<String, RedisCountDo> redisTemplate = redisConfig.redisTemplate();
        for (int i = 0; i < 4; i++) {
//            Long aLong = RandomUtil.randomLong();
            Long aLong=541654546156L;
            String userId = new StringBuilder("AAA:BBB:").append(aLong).toString();
            if (!redisTemplate.hasKey(userId)) {
                RedisCountDo redisCountDoSet = new RedisCountDo(new Date(), 10);
                redisTemplate.opsForValue().set(userId, redisCountDoSet, 1, TimeUnit.DAYS);
            } else {
                RedisCountDo redisCountDo = redisTemplate.opsForValue().get(userId);
                while (redisCountDo.getCount() == 0) {
                    Long expire = redisTemplate.boundHashOps(userId).getExpire();
                    System.out.println(String.format("请求次数太多,请%s后再来", FormatTimeUtils.formatTime(expire)));
                    System.exit(0);
                }
                redisCountDo.setCount(redisCountDo.getCount() - 1);
                redisTemplate.opsForValue().set(userId, redisCountDo, 0);
                System.out.println(redisCountDo);
            }
        }
    
    }

做 redisTemplate.opsForValue().set(userId, redisCountDoSet, 1, TimeUnit.DAYS);等这些读写操作.

标签:userId,Redis,springframework,乱码,org,import,序列化,redisTemplate
来源: https://blog.csdn.net/showmex/article/details/122861053

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有