zoukankan      html  css  js  c++  java
  • 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");
        }
    }
  • 相关阅读:
    If循环初探
    Python用户交互程序
    Python 变量
    python的第一个程序
    PropertiesConfiguration读取值中包含英文逗号,用“”转义
    在windows下查看某个运行程序(或进程)的命令行参数
    eclipse open call hierarchy
    根据process杀死进程
    java在不存在文件夹的目录下创建文件
    eclipse部署web项目至本地tomcat, webapps中找不到
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12463223.html
Copyright © 2011-2022 走看看