Redis学习笔记(5)-SpringDataRedis的使用

HDIS-Framework

HDIS-Framework是一个基于SpringBoot、Kubernetes、阿里云服务,编写的一个用于支撑微服务的极速开发框架。

其文档详尽,Demo全面,设计合理,开箱即用,节省开发时间,提升开发效率。

配套的docker、Kubernetes教程已踩过各种坑,让你的微服务无障碍的顺畅运行起来。

HDIS与Kubernetes或SpringCloud配合使用,能达到最佳效果。

与Spring集成

我需要哪些jar包?


	org.springframework.data
    spring-data-redis


    redis.clients
    jedis

如何配置spring配置文件?



    
    
    
    
    
    

一般情况,只需要配置RedisTemplate或StringRedisTemplate其中一个就行,常用的为StringRedisTemplate。

RedisTemplate与StringRedisTemplate的区别?

StringRedisTemplate:

public class StringRedisTemplate extends RedisTemplate {
    public StringRedisTemplate() {
        StringRedisSerializer stringSerializer = new StringRedisSerializer();
        this.setKeySerializer(stringSerializer);
        this.setValueSerializer(stringSerializer);
        this.setHashKeySerializer(stringSerializer);
        this.setHashValueSerializer(stringSerializer);
    }

    public StringRedisTemplate(RedisConnectionFactory connectionFactory) {
        this();
        this.setConnectionFactory(connectionFactory);
        this.afterPropertiesSet();
    }

    protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
        return new DefaultStringRedisConnection(connection);
    }
}

从上面的代码可以看出,StringRedisTemplate继承了键值类型都为String的RedisTemplate,且使用StringRedisSerializer作为序列化工具。所以StringRedisTemplate能使用的方法,RedisTemplate都能使用,下面的例子只会展示StringRedisTemplate的方法。

StringRedisSerializer:

public class StringRedisSerializer implements RedisSerializer {
    private final Charset charset;

    public StringRedisSerializer() {
        this(Charset.forName("UTF8"));
    }

    public StringRedisSerializer(Charset charset) {
        Assert.notNull(charset);
        this.charset = charset;
    }

    public String deserialize(byte[] bytes) {
        return bytes == null?null:new String(bytes, this.charset);
    }

    public byte[] serialize(String string) {
        return string == null?null:string.getBytes(this.charset);
    }
}

可以看出,StringRedisSerializer使用UTF8字符集处理字符串。

使用API操作基本redis基本数据类型


spring提供哪些接口操作redis基本数据?

第一组

ValueOperations:字符串类型操作
ListOperations:列表类型操作
SetOperations:集合类型操作
ZSetOperations:有序集合类型操作
HashOperations:散列操作

第二组

BoundValueOperations:字符串类型操作
BoundListOperations:列表类型操作
BoundSetOperations:集合类型操作
BoundZSetOperations:有序集合类型操作
BoundHashOperations:散列操作

如何获得接口的实现?

第一组

ValueOperations valueOperations = stringRedisTemplate.opsForValue();
ListOperations listOperations = stringRedisTemplate.opsForList();
SetOperations setOperations = stringRedisTemplate.opsForSet();
ZSetOperations zSetOperations = stringRedisTemplate.opsForZSet();
HashOperations hashOperations = stringRedisTemplate.opsForHash();

第二组

BoundValueOperations valueOperations = stringRedisTemplate.boundValueOps("key");
BoundListOperations listOperations = stringRedisTemplate.boundListOps("key");
BoundSetOperations setOperations = stringRedisTemplate.boundSetOps("key");
BoundZSetOperations zSetOperations = stringRedisTemplate.boundZSetOps("key");
BoundHashOperations hashOperations = stringRedisTemplate.boundHashOps("key");

从上面两组实现可以发现,第二组API只是在第一组API的上面将key值的绑定放在获得接口时了,此举方便了每次操作基本数据类型的时候不用反复的去填写key值,只需要操作具体的value就行了。

具体有哪些数据操作方式,如ValueOperations的get与set,ListOperations的push与pop等可以参照:Redis学习笔记(2)-Redis数据类型。他们的方法签名与客户端redis-cli操作redis时的签名是一样的。

使用API操作消息队列


使用API前需要了解

Redis学习笔记(3)-Redis事务,过期时间,队列

如何发送消息队列?

RedisTemplate template = template.convertAndSend("channel", "message");

第一个参数为发送的消息的频道,第二个参数为消息本身。

如何接受队列中的消息?

public interface MessageDelegate {
  void handleMessage(String message);
  void handleMessage(Map message); void handleMessage(byte[] message);
  void handleMessage(Serializable message);
  void handleMessage(Serializable message, String channel);
}

首先,需要一个符合MessageDelegate 接口方法签名的类,这个类是自定义的,可以使用MessageDelegate 中的一个或多个签名方式,如:

public class UserMessageDelegate {
    public void handleMessage(String message) {
        System.out.println(message);
    }
}

得到此类后,将此类注册到消息监听容器中:



       
    
        
    
    
    
    

其中,topic就是你要监听的频道。

你可能感兴趣的:(Redis学习笔记)