目录
一、介绍
二、Jedis的使用
三、SpringDataRedis的使用
创建:
一、介绍
在Redis官网,提供了多种编程语言的客户端,如Java、C++等,官网地址:Clients | Redis
 而对于Java的客户端有很多,但是用的最多的就是下图的前两个:
        而对于Java的客户端有很多,但是用的最多的就是下图的前两个:

二、Jedis的使用
创建一个普通javamaven项目:


在pom.xml文件中引入依赖:
    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.7.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
建立连接:
创建测试类:
package com.jedis.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import redis.clients.jedis.Jedis;
@RunWith(JUnit4.class)
public class JedisTest {
    private Jedis jedis;
    @Test
    public void run(){
        jedis=new Jedis("127.0.0.1",6379);
        jedis.select(0);
        String jedisTest = jedis.set("jedisTest", "123");
        System.out.println(jedisTest);
        String s = jedis.get("jedisTest");
        System.out.println(s);
        if(jedis!=null){
            jedis.close();
        }
    }
}
运行结果:

jedis提供的方法和指令名称是相同的,因此比较好上手。
通过上述操作,我们可以看出jedis的使用,还是非常方便的,只需要三步就可以实现:
1、导入依赖。
2、建立连接。
3、执行方法(和命令同名)。
jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此,我们使用jedis连接池来代替上述这种直连的方式。
package com.jedis.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@RunWith(JUnit4.class)
public class JedisTest {
    private JedisPool jedisPool;
    @Test
    public void run2(){
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        //最大连接
        jedisPoolConfig.setMaxTotal(8);
        //最大空闲连接
        jedisPoolConfig.setMaxIdle(8);
        //最小空闲连接数量
        jedisPoolConfig.setMinIdle(0);
        //设置最长等待时间
        jedisPoolConfig.setMaxWaitMillis(200);
        jedisPool=new JedisPool(jedisPoolConfig,"127.0.0.1",6379,1000);
        //通过连接池获取连接
        Jedis resource = jedisPool.getResource();
        String myTest = resource.set("myTest", "1234");
        System.out.println(myTest);
        String s = resource.get("myTest");
        System.out.println(s);
    }
}输出结果:

三、SpringDataRedis的使用
        SpringData是Spring中数据操作的模块,官网地址:Spring Data Redis
         包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis
提供了对不同Redis客户端的整合(Lettuce和Jedis)
提供了RedisTemplate统一API来操作Redis
支持Redis的发布订阅模型
支持Redis哨兵和Redis集群
支持基于Lettuce的响应式编程
支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化支持基于Redis的JDKCollection实现
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。RedisTemplate,是根据命令种类来分类的方法。并且将不同数据类型的操作API封装到了不同的类型中:

创建:
SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单。
首先,创建SpringBoot项目:



导入相关依赖:
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- 连接池依赖 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>在resource目录下创建application.yaml文件:

并填充内容:
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 100测试代码:
package com.example.springdataredistest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
class SpringDataRedisTestApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    void contextLoads() {
        redisTemplate.opsForValue().set("redisTemplate","success");
        String o = (String) redisTemplate.opsForValue().get("redisTemplate");
        System.out.println(o);
    }
}
运行结果:

但是我们发现,Redis数据库中存入的并非我们所想的内容:

        这是因为采用了SpringDataRedis默认的序列化方式。
         RedisTemplate可以接收任意0bject作为值写入Redis,只不过写入前会把0bject序列化为字节形式,默认是采用IDK序列化,得到的结果是上面这样的。
这种方式有很大的缺点:1、可读性差。2、内存占用大。
因此,我们可以自定义序列化方式,来得到我们想要的结果。
我们创建一个配置类:
package com.jedis.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@RunWith(JUnit4.class)
public class JedisTest {
    private Jedis jedis;
    @Test
    public void run(){
        jedis=new Jedis("127.0.0.1",6379);
        jedis.select(0);
        String jedisTest = jedis.set("jedisTest", "123");
        System.out.println(jedisTest);
        String s = jedis.get("jedisTest");
        System.out.println(s);
        if(jedis!=null){
            jedis.close();
        }
    }
    private JedisPool jedisPool;
    @Test
    public void run2(){
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        //最大连接
        jedisPoolConfig.setMaxTotal(8);
        //最大空闲连接
        jedisPoolConfig.setMaxIdle(8);
        //最小空闲连接数量
        jedisPoolConfig.setMinIdle(0);
        //设置最长等待时间
        jedisPoolConfig.setMaxWaitMillis(200);
        jedisPool=new JedisPool(jedisPoolConfig,"127.0.0.1",6379,1000);
        //通过连接池获取连接
        Jedis resource = jedisPool.getResource();
        String myTest = resource.set("myTest", "1234");
        System.out.println(myTest);
        String s = resource.get("myTest");
        System.out.println(s);
    }
}
导入依赖:
        <!--  Jackson依赖  -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>测试方法:
package com.example.springdataredistest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
public class Test2 {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Test
    public void run(){
        redisTemplate.opsForValue().set("redisTemplateNew","successNew");
        String o = (String) redisTemplate.opsForValue().get("redisTemplateNew");
        System.out.println(o);
    }
}
执行结果:

数据库展示:




















