【Redis入门】认识Java客户端

182 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情 本期我们继续跟着黑马学习redis,下面是我整理的课堂笔记。

引言

上期我们了解到了Redis的数据结构以及在linux下的用法,在实际开发中,我们需要基于语言的客户端实现,在Redis官网中提供了各种语言的客户端,官网地址:redis.io/clients

下面我们来认识redis的两个常用JAVA客户端即Jedis与SpringDataRedis

image.png

Jedis

官网地址: github.com/redis/jedis 在Maven工程中直接导入依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.2.0</version>
</dependency>

快速上手并测试

private Jedis jedis;
//在执行前加载配置
@BeforeEach
public void setUp() {
// 建立连接
      jedis = new Jedis("127.0.0.1", 6379);    
// 设置密码
      jedis.auth("123321");
// 选择库
      jedis.select(0);
}
@Test
public void testString() {
   // 插入数据,方法名与Redis命令一致
   String result = jedis.set("name", "zs");
   System.out.println("result = " + result);
   // 获取数据
   String name = jedis.get("name");
   System.out.println("name = " + name);
   }
  //需要在执行后释放资源
@AfterEach
public void tearDown() {
    // 释放资源
    if (jedis != null) {
    jedis.close(); 
    }
 }

可以看到Jedis 使用不难只需要

  • 到jedis官网上引入依赖
  • 创建Jedis对象,建立连接
  • 使用Jedis,调用与redis相同名字的方法
  • 释放资源

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐大家使用Jedis连接池代替Jedis的直连方式。在SpringBoot下直接集成就好

public class JedisConnectionFactory {
private static final JedisPool jedisPool;
static {
  JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  // 最大连接
  jedisPoolConfig.setMaxTotal(8);
  // 最大空闲连接
  jedisPoolConfig.setMaxIdle(8);
  // 最小空闲连接
  jedisPoolConfig.setMinIdle(0);
  // 设置最长等待时间 ms为单位
  jedisPoolConfig.setMaxWaitMillis(200);
  jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379,1000, "Password");
  }
  // 获取Jedis对象
  public static Jedis getJedis(){
  return jedisPool.getResource();
  }
}

SpringDataRedis

spring-data-redis提供了redis的java客户端的抽象,在开发中可以忽略掉切换具体的客户端所带来的影响,而且他本身就属于spring的一部分,比起单纯的使用jedis,更加稳定,管理起来更加自动化和快捷。(当然jedis的缺点不止这些) 官网地址:spring.io/projects/sp…

  • 提供了对不同Redis客户端的整合(Lettuce和Jedis)
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模型
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的JDKCollection实现

spring-data-redis的特性

  • 自动管理连接池,提供了一个高度封装的RedisTemplate类,以及内部还有一个StringRedisTemplate
  • 针对jedis客户端的大量api进行了归类封装,把同一类型的操作封装成了operation接口.支持redis中的五种数据类型的操作,详见黑马视频里老师的总结

image.png

  • 可以定制化针对数据的"序列化与反序列化"

使用

引入依赖

<!-- spring boot redis缓存引入 -->																																						
<dependency>																																						
    <groupId>org.springframework.boot</groupId>																																						
    <artifactId>spring-boot-starter-data-redis</artifactId>																																						
</dependency>																																						
<!-- lecttuce 缓存连接池-->																																						
<dependency>																																						
    <groupId>org.apache.commons</groupId>																																						
    <artifactId>commons-pool2</artifactId>																																						
</dependency>

在SpringBoot中配置Application.yaml

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    database: 2
    password: password
    lettuce:
      pool:
        max-active: 20  #最大连接数,负值表示没有限制,默认8
        max-wait: -1    #最大阻塞等待时间,负值表示没限制,默认-1,即无限等待
        max-idle: 8     #最大空闲连接,默认8
        min-idle: 0     #最小空闲连接,默认0

这样,我们就可以很容易在idea中去使用redis了

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class test {
  @Autowired
  private RedisTemplate redisTemplate;
  @Test
  public void  testRedis(){
     for (int i = 0; i < 10; i++) {
         redisTemplate.opsForList().rightPush("key",i);
     }
     //-1则表示所有数据
     List keys = redisTemplate.opsForList().range("key", 0, -1);
     System.out.println(keys.size());
     }
}

总结

直接使用SpringDataRedis,既简洁又稳定,在application.yaml里面配置,还能省去许多配置东西,直接速用。