Redis-11-在Java中操作Redis-使用Spring-Data-Redis操作Redis-基础环境&设置序列化器

Redis-11-在Java中操作Redis-使用Spring-Data-Redis操作Redis-基础环境&设置序列化器

在Java中操作Redis
1.Spring Data Redis
在Spring Boot项目中,可以使用Spring Data Redis来简化Redis操作,maven坐标:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

​ Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对jedis客户端中大量API进行了归类封装,将同一类型操作封装为operation接口,
​ 具体分类如下:
​ 1.ValueOperations:简单K-V操作

​ 2.SetOperations:set类型数据操作

​ 3.ZSetOperations:zset类数据操作

​ 4.HashOperations:针对map类型的数据操作

​ 5.ListOperations:针对list类型的数据操作

application.yml配置文件:

spring:
  application:
    name: springdataredis_demo
  #Redis相关配置
  redis:
    host: localhost
    port: 6379
    #password: 123456
    database: 0 #操作的是0号数据库  Redis跑起来之后,默认给我们提供了16个数据库,这个数量可以在配置文件里面修改,在配置文件的170行。
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest2 {

    //我们没有自己去创建这个对象,为什么直接通过Autowird就能注入进来呢
    //这是因为我们这个RedisTemplate其实是由我们的SpringBoot这个框架自动装配的,也就是说,只要我们配置文件中
    //写了Redis的那段配置,他就可以给我们注进来这么一个对象。
    //进入RedisAutoConfiguration这个配置类,里面有个redisTemplate方法,这个方法的返回值就是RedisTemplate,
    //方法上面加了@Bean注解,说明我们这个对象是由Spring框架去负责维护和管理的。
    //还有一个@ConditionOnMissingBean(name = "redisTemplate")注解,这其实是一个条件,也就是说我们当前这个方法,
    //他其实是在特定条件下才会被调用,什么条件??missingBean就是当我们这个Spring工厂里面没有redisTemplate这种对象的时候,
    //他才会调用这个方法,然后把这个对象给他创建出来
    //比如我们自己写代码,我们自己创建了这么一个bean,并且把他放到我们的Spring容器里面了,这个时候就不再去调用redisTemplate这个方法了
    //因为当前我们没有redisTemplate,所以他在启动的时候,就会把这个对象给我们创建出来。正是因为他已经创建出来了,所以在测试方法这个位置可以
    //通过Autowird这种方式自动注入
    /*
    *@Bean
    @ConditionalOnMissingBean(
        name = {"redisTemplate"}
    )
    @ConditionalOnSingleCandidate(RedisConnectionFactory.class)
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
    * */
    @Autowired
    private RedisTemplate redisTemplate;
}

@SpringBootTest
@RunWith(SpringRunner.class)
public class Test {

    @Autowired
    private RedisTemplate redisTemplate;

    @org.junit.Test
    public void testString() {
        redisTemplate.opsForValue().set("city", "beijing");
    }
}

为什么出现乱码了??

默认的序列化方式把key存进去过后就变形了,如何改变?

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}

value也有序列化器,但是不用去管他,因为程序中获取出来的时候还会反序列化

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值