Springboot Redis设置key前缀的方法步骤

properties中配置

#redisredis.masterClusterNodes=10.40.57.197:7000;10.40.57.198:7002;10.40.57.199:7004redis.slaveClusterNodes=10.40.57.197:7001;10.40.57.198:7003;10.40.57.199:7005redis.maxTotal=50redis.maxIdle=10redis.minIdle=1redis.maxWaitMillis=1000redis.testOnBorrow=trueredis.testOnReturn=trueredis.timeout=10000redis.lockExpireSeconds=5redis.soTimeout=1000redis.maxAttempts=3redis.password=123456redis.clientName=clientName redis.keyPrefix=0000-->

读取配置文件内容:

@Component@ConfigurationProperties(prefix = "redis")@PropertySource("classpath:redis.properties")public class RedisProperties {    /**     * master 节点数据     */    private String masterClusterNodes;    /**     * slave 节点数据     */    private String slaveClusterNodes;    /**     * 连接超时时间     */    private int timeout;    /**     * 获取数据超时时间     */    private int soTimeout;    /**     * 出现异常最大重试次数     */    private int maxAttempts;    /**     * 连接时使用的密码     */    private String password;     private int maxTotal;    private int maxIdle;    private int minIdle;    private int maxWaitMillis;     private boolean testOnBorrow;    private boolean testOnReturn;     /**     * key前缀     */    private String keyPrefix;    sets,gets    }

自定义StringSerializer

这个还是需要优化的

@Componentpublic class MyStringSerializer implements RedisSerializer<String> {     private final Logger logger = LoggerFactory.getLogger ( this.getClass () );     @Autowired    private RedisProperties redisProperties;     private final Charset charset;     public MyStringSerializer() {        this ( Charset.forName ( "UTF8" ) );    }     public MyStringSerializer(Charset charset) {        Assert.notNull ( charset, "Charset must not be null!" );        this.charset = charset;    }     @Override    public String deserialize(byte[] bytes) {        String keyPrefix = redisProperties.getKeyPrefix ();        String saveKey = new String ( bytes, charset );        int indexOf = saveKey.indexOf ( keyPrefix );        if (indexOf > 0) {            logger.info ( "key缺少前缀" );        } else {            saveKey = saveKey.substring ( indexOf );        }        logger.info ( "saveKey:{}",saveKey);        return (saveKey.getBytes () == null ? null : saveKey);    }     @Override    public byte[] serialize(String string) {        String keyPrefix = redisProperties.getKeyPrefix ();        String key = keyPrefix + string;        logger.info ( "key:{},getBytes:{}",key, key.getBytes ( charset ));        return (key == null ? null : key.getBytes ( charset ));    }}redisConfig 配置@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport {     private final Logger logger = LoggerFactory.getLogger ( this.getClass () );     @Autowired    private RedisProperties redisProperties;    @Autowired    private MyStringSerializer myStringSerializer;        @Bean    public JedisConnectionFactory jedisConnectionFactory() {        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory ( redisClusterConfiguration (),                jedisPoolConfig () );        jedisConnectionFactory.setPassword ( redisProperties.getPassword () );        jedisConnectionFactory.setTimeout ( redisProperties.getTimeout () );        return jedisConnectionFactory;    }     @Bean    public RedisClusterConfiguration redisClusterConfiguration() {        String[] ipPorts = redisProperties.getClusterNodes ().split ( ";" );        RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration ( Arrays.asList ( ipPorts        ) );        return redisClusterConfiguration;    }     @Bean    public JedisPoolConfig jedisPoolConfig() {        JedisPoolConfig jedisPoolConfig = BeanMapperUtil.map ( redisProperties,                JedisPoolConfig.class );        return jedisPoolConfig;    }      /**     * 配置cacheManage     * 设置超时时间  1小时     *     * @param redisTemplate     * @return     */    @Bean    public CacheManager cacheManager(RedisTemplate redisTemplate) {        RedisCacheManager redisCacheManager = new RedisCacheManager ( redisTemplate );        redisCacheManager.setDefaultExpiration ( 60 * 60 );        return redisCacheManager;    }     @Bean    public RedisTemplate<String, String> redisTemplate() {        StringRedisTemplate template = new StringRedisTemplate ( jedisConnectionFactory () );        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer ( Object.class );        ObjectMapper om = new ObjectMapper ();        om.setVisibility ( PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY );        om.enableDefaultTyping ( ObjectMapper.DefaultTyping.NON_FINAL );        jackson2JsonRedisSerializer.setObjectMapper ( om );        template.setKeySerializer ( myStringSerializer );        template.setHashKeySerializer ( myStringSerializer );        template.setValueSerializer ( jackson2JsonRedisSerializer );        template.afterPropertiesSet ();        return template;    }}

到此这篇关于Springboot Redis设置key前缀的方法步骤的文章就介绍到这了,更多相关Springboot Redis key前缀内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

未曾失败的人恐怕也未曾成功过。

Springboot Redis设置key前缀的方法步骤

相关文章:

你感兴趣的文章:

标签云: