自定义 RedisTemplate

1. 示例

@RestController
@RequestMapping("/redis/manager")
public class RedisManagerController {

    @Resource
    private RedisTemplateManager redisTemplateManager;

    @RequestMapping("/all")
    public String getAllKey() {
        return JSON.toJSONString(redisTemplateManager.getRedisTemplate().keys("*"));
    }

    @GetMapping("/setValue")
    public String setValue(String key, String value){
        redisTemplateManager.getRedisTemplate().opsForValue().set(key, value);
        return "success";
    }

    @RequestMapping("/getValue")
    public String getValue(String key) {
        return redisTemplateManager.getRedisTemplate().opsForValue().get(key).toString();
    }

    @RequestMapping("/opsForZSet")
    public String opsForZSet(String key) {
        ZSetOperations zSetOperations = redisTemplateManager.getRedisTemplate().opsForZSet();
        zSetOperations.add(key, "aaa", 1);
        zSetOperations.add(key, "bbb", 2);
        zSetOperations.add(key, "ccc", 3);

        Set range = zSetOperations.range(key, 0, zSetOperations.size(key));
        return JSON.toJSONString(range);
    }

}

1.1 RedisTemplate 配置

@Configuration
public class RedisConfig {
    @Bean(name = "redisTemplate")
    public RedisTemplate getRedisTemplate(RedisConnectionFactory factory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(factory);

        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setValueSerializer(stringRedisSerializer);

        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean(name = "redisTemplateNew")
    public RedisTemplate getRedisTemplateNew(RedisConnectionFactory factory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(factory);

        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setValueSerializer(stringRedisSerializer);

        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

2. RedisTemplateManager 类

2.1 RedisTemplateManager

@Component
public class RedisTemplateManager {

    @Resource
    private RedisTemplate redisTemplate;
    @Resource
    private RedisTemplate redisTemplateNew;

    private LogRedisTemplate logRedisTemplateNew;
    private LogRedisTemplate logRedisTemplateOld;

    public RedisTemplate getRedisTemplate() {
        return getNewRedisTemplate();
    }

    private RedisTemplate getNewRedisTemplate() {
        if (logRedisTemplateNew == null) {
            logRedisTemplateNew = new LogRedisTemplate(redisTemplateNew, "new");
        }
        return logRedisTemplateNew;
    }

    private RedisTemplate getOldRedisTemplate() {
        if(logRedisTemplateOld == null){
            logRedisTemplateOld = new LogRedisTemplate(redisTemplate,"old");
        }
        return logRedisTemplateOld;
    }
}

2.2 LogRedisTemplate

/**
 * 参考 RedisTemplate 类,需要重写 RedisOperations 的方法
 */
public class LogRedisTemplate extends RedisTemplate implements RedisOperations {

    private final String tag;
    private final RedisTemplate redisTemplate;
    private LogZSetOperations logZSetOperations;

    public LogRedisTemplate(RedisTemplate redisTemplate, String tag) {
        this.redisTemplate = redisTemplate;
        this.tag = tag;
    }

    @Override
    public Set keys(String pattern) {
        return redisTemplate.keys(pattern);
    }

    @Override
    public ValueOperations opsForValue() {
        return redisTemplate.opsForValue();
    }

    @Override
    public ZSetOperations opsForZSet() {
        if(logZSetOperations == null){
            logZSetOperations = new LogZSetOperations(redisTemplate.opsForZSet(),tag);
        }
        return logZSetOperations;
    }

    @Override
    public RedisSerializer> getKeySerializer() {
        return redisTemplate.getKeySerializer();
    }

    @Override
    public RedisSerializer> getValueSerializer() {
        return redisTemplate.getValueSerializer();
    }

    // ...
}

2.3 处理 Zset 类型

public class LogZSetOperations implements ZSetOperations {

    private final ZSetOperations zsetOperations;
    private final String tag;

    public LogZSetOperations(ZSetOperations zsetOperations, String tag) {
        this.zsetOperations = zsetOperations;
        this.tag = tag;
    }

    @Override
    public Boolean add(String key, String value, double score) {
        return zsetOperations.add(key, value, score);
    }

    @Override
    public Set range(String key, long start, long end) {
        return zsetOperations.range(key, start, end);
    }

    @Override
    public Long size(String key) {
        return zsetOperations.size(key);
    }

    // ...
}

【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容