SpringData Redis快速入门

SpringData Redis 简介:
  Redis是一个基于内存的数据结构存储系统,它可以用作数据库或者缓存。它支持多种类型的数据结构,
  这些数据结构类型分别为 String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。
  SpringData Redis的作用是通过一段简单的配置即可访问redis服务,它的底层是对java提供的redis开发包(比如jedis等)进行了高度封装,主要提供了如下功能:
    连接池自动管理,提供了一个高度封装的 RedisTemplate类,基于这个类的对象可以对redis进行各种操作
    针对 jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
      ValueOperations :简单字符串类型数据操作
      SetOperations :set类型数据操作
      ZSetOperations :zset类型数据操作
      HashOperations :map类型的数据操作
      ListOperations :list类型的数据操作

SpringData Redis 入门案例:

  1.创建工程,引入坐标

<dependencies>
        <!-- jedis依赖 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.3</version>
        </dependency>
        <!-- springdata整合redis -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.1.8.RELEASE</version>
        </dependency>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>
        <!-- 进行json数据转换 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
    </dependencies>

  2.创建配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置Jedis连接池参数 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- 最大连接数 -->
        <property name="maxTotal" value="30"></property>
        <!--最大空闲数-->
        <property name="maxIdle" value="20"/>
        <!-- 最小空闲连接数 -->
        <property name="minIdle" value="10"></property>
        <!--连接时的最大等待毫秒数-->
        <property name="maxWaitMillis" value="3000"/>
        <!--在提取一个jedis实例时,是否提前进行验证操作;如果为true,则得到的jedis实例均是可用的-->
        <property name="testOnBorrow" value="false"/>
    </bean>

    <!-- 配置Jedis连接工厂,用于产生连接 -->
    <bean id="jedisConnectionFactory" p:hostName="192.168.43.182" p:port="6379" p:poolConfig-ref="jedisPoolConfig"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"/>

    <!-- 配置redis模板,操作数据库时使用 -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <!-- 注入Jedis连接工厂,用于获取连接 -->
        <property name="connectionFactory" ref="jedisConnectionFactory"></property>
    </bean>
</beans>

  3.创建测试类,完成一条简单数据的存取

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-redis.xml")
public class RedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSave() {
        // ValueOperations :简单字符串类型数据操作
        // SetOperations :set类型数据操作
        // ZSetOperations :zset类型数据操作
        // HashOperations :map类型的数据操作
        // ListOperations :list类型的数据操作
        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("name", "lily");
    }

    @Test
    public void testGet() {
        ValueOperations ops = redisTemplate.opsForValue();
        Object name = ops.get("name");
        System.out.println(name);
    }
}

SpringData Redis 的序列化器:

  通过Redis提供的客户端查看存入redis的数据,会发现存入的数据并不是简单的字符串,而是一些类似于二进制的数据

  SpringData Redis在保存数据的时候,底层有一个序列化器在工作,它会将要保存的数据(键和值)按照一定的规则进行序列化操作后再进行存储。
  spring-data-redis提供如下几种序列化器:

    StringRedisSerializer: 简单的字符串序列化
    GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化
    Jackson2JsonRedisSerializer: 序列化对象为json字符串
    GenericJackson2JsonRedisSerializer: 功能同上,但是更容易反序列化
    OxmSerializer: 序列化对象为xml字符串
    JdkSerializationRedisSerializer: 序列化对象为二进制数据

  RedisTemplate默认使用的是JdkSerializationRedisSerializer对数据进行序列化。

  SpringData提供了两种方式选择自己想要的序列化器:

    1. 通过配置文件配置(作用范围是全局)

<!-- 配置redis模板,操作数据库时使用 -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <!-- 注入Jedis连接工厂,用于获取连接 -->
        <property name="connectionFactory" ref="jedisConnectionFactory"></property>
        <!-- 配置非hash类型的序列化器 key -->
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <!-- value -->
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
    </bean>

    2 . 通过RedisTemplate设定(作用范围是局部)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-redis.xml")
public class RedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    
    @Before
    public void init() {
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
    }

    @Test
    public void testSave() {
        // ValueOperations :简单字符串类型数据操作
        // SetOperations :set类型数据操作
        // ZSetOperations :zset类型数据操作
        // HashOperations :map类型的数据操作
        // ListOperations :list类型的数据操作
        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("name", "lily");
    }
}
原文地址:https://www.cnblogs.com/roadlandscape/p/12463223.html