spring boot中使用redis

springboot是下一代框架,大大简化了对spring的使用,在springboot中使用redis同样非常简单。
首先新建一个boot项目,然后再boot项目中加入redis的依赖。

<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
            <version>1.5.6.RELEASEversion>
dependency>

在src/main/resources目录下的application.properties文件中添加redis的配置。
spring.redis.database= # 数据库名,0-16,一般指定为第一个,即0
spring.redis.host=# redis服务器ip地址
spring.redis.password= # 密码
spring.redis.port=# 端口
spring.redis.pool.max-idle= # 最大空闲数目
spring.redis.pool.min-idle=#最小空闲数据
spring.redis.pool.max-active=#最大活跃池数据
spring.redis.pool.max-wait=#最大等待数
spring.redis.sentinel.master= # redis哨兵集群的主节点
spring.redis.sentinel.nodes= # redis哨兵集群的从节点,形式为host:port,中间用逗号隔开。
这里我就直接连接了本地的redis服务,redis配置也只是简单配置。如下:
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.timeout=0
通常来说,redis存储时候的键和值都是stirng,springboot也提供了StringRedisTemplate来支持这样的存取。使用起来也非常简单,我们只需要直接用@Autowired来引入StringRedisTemplate即可使用,因为springboot在初始化时会自动读取配置文件中的数据,一旦发现和redis相关的配置,就会自动初始化StringRedisTemplate。
接下来我们在test文件中写一个测试方法,来看看效果。

    @Autowired
    StringRedisTemplate StringRedisTemplate;
    @Test
    public void stringRedisTest() {
        StringRedisTemplate.opsForValue().set("aaa", "bbb");
        String getV = StringRedisTemplate.opsForValue().get("aaa");
        System.out.println(getV);
    }

控制台输出bbb。
一般来说以String作为键值对已经能够满足大多数的需求,但有时我们需要直接对对象进行存取,其实spring boot也提供了这样的类,RedisTemplate

//StringRedisTemplate其实就是RedisTemplate。但是要想直接使用这个类,我们还需要做一些其他的工作。因为我们存储的value值是对象,所以我们需要实现对对象的序列化和反序列化。创建一个类MyObjectSerializer并实现RedisSerializer接口。
public class MyObjectSerializer implements RedisSerializer<Object>{
    private Converterbyte[]> serializer=new SerializingConverter();//序列化器
    private Converter<byte[], Object> deserializer=new DeserializingConverter();//反序列化器
    @Override
    public byte[] serialize(Object t) throws SerializationException {//将对象序列化为字节数组
        // TODO Auto-generated method stub
        if(t==null){
            return new byte[0];
        }
        try {
            return serializer.convert(t);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public Object deserialize(byte[] bytes) throws SerializationException {//将字节数组反序列化为对象
        if(bytes==null||bytes.length==0){
            return null;
        }
        try {
            return deserializer.convert(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

然后创建一个类RedisConfig。

@Configuration
public class RedisConfig {
    @Bean
    JedisConnectionFactory getConnectionFactory(){
        return new JedisConnectionFactory();
    } 
    @Bean
    RedisTemplate<String, Object> getRedisTemplate(){
        RedisTemplate<String, Object> redisTemplate=new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(getConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());//设置键的序列化
        redisTemplate.setValueSerializer(new MyObjectSerializer());//设置值的序列化
        return redisTemplate;
    }
}

经过上面的设置后,我们已经可以编写一个测试类来看看效果了。

@Autowired
RedisTemplate redisTemplate;
@Test
    public void objectRedisTest() {
        Student student=new Student();
        student.setStuNumber("001");
        student.setName("张三");
        student.setAge(20);
        redisTemplate.opsForValue().set(student.getStuNumber(), student);
        Student studentFromRedis = (Student)redisTemplate.opsForValue().get(student.getStuNumber());
        System.out.println(studentFromRedis);
    }

在控制台输出:Student [stuNumber=001, name=张三, age=20]。

你可能感兴趣的:(springboot)