Spring Data Redis 简单使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l1336037686/article/details/81609833

一,Spring Data Redis的基本使用

1.环境搭建

基本结构

这里写图片描述

Maven依赖


    <dependencies>
        <!--Spring-->
        <!-- Spring核心依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- Spring dao依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- Spring web依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- Spring test依赖:单元测试和集成测试 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
        </dependency>

        <!-- 缓存 -->
        <!-- jedis客户端 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <!--Spring-Redis-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.8.14.RELEASE</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>spring-libs-release</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

配置文件

redis.properties

redis.host=127.0.0.1
redis.port=6379
redis.password=""
redis.maxIdle=400
redis.maxTotal=6000
redis.maxWaitMillis=1000
redis.blockWhenExhausted=true
redis.testOnBorrow=true
redis.timeout=100000
defaultCacheExpireTime=60

spring-redis.xml

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.3.xsd"
       default-lazy-init="false">

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:redis.properties" />
    <!-- redis数据源 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- 最大空闲数 -->
        <property name="maxIdle" value="${redis.maxIdle}" />
        <!-- 最大空连接数 -->
        <property name="maxTotal" value="${redis.maxTotal}" />
        <!-- 最大等待时间 -->
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <!-- 连接超时时是否阻塞,false时报异常,ture阻塞直到超时, 默认true -->
        <property name="blockWhenExhausted" value="${redis.blockWhenExhausted}" />
        <!-- 返回连接时,检测连接是否成功 -->
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>

    <!-- Spring-redis连接池管理工厂 -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <!-- IP地址 -->
        <property name="hostName" value="${redis.host}" />
        <!-- 端口号 -->
        <property name="port" value="${redis.port}" />
        <!-- 超时时间 默认2000-->
        <property name="timeout" value="${redis.timeout}" />
        <!-- 连接池配置引用 -->
        <property name="poolConfig" ref="poolConfig" />
        <!-- usePool:是否使用连接池 -->
        <property name="usePool" value="true"/>
    </bean>

    <!-- RedisTemplate -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory" />
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
        </property>
        <!--开启事务  -->
        <property name="enableTransactionSupport" value="true"></property>
    </bean>
</beans>

2.简单使用

2.1官方文档

spring-data-redis 1.8
参考文档 https://docs.spring.io/spring-data/redis/docs/1.8.14.RELEASE/reference/html/
Api文档 https://docs.spring.io/spring-data/redis/docs/1.8.14.RELEASE/api/

2.2使用RedisTemplate操作对象(主要操作)

RedisTemplate简化了访问Redis操作代码

2.2.1操作视图

这里写图片描述

2.2.2常用的方法

方法名 功能
boundGeoOps(K key) 返回绑定到给定键的地理空间特定操作接口
boundHashOps(K key) 返回对绑定到给定键的哈希值执行的操作
boundListOps(K key) 返回对绑定到给定键的List集合执行的操作
boundSetOps(K key) 返回对绑定到给定键的Set集合执行的操作
boundValueOps(K key) 返回对绑定到给定键的值执行的操作
boundZSetOps(K key) 返回对绑定到给定键的ZSet集合执行的操作
delete(K key) 根据Key删除
expire(K key, long timeout, TimeUnit unit) 设置失效时间

2.2.3例子(使用RedisTemplate进行简单操作)

使用spring单元测试执行


/**
 * @author LGX_TvT
 * @date 2018-08-15 19:55
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-redis.xml")
public class RedisTemplateExample {

    @Autowired
   private RedisTemplate redisTemplate;

    /**
     * 值类型操作
     */

    /**
     * 设置值
     */
    @Test
    public void setValue(){
        redisTemplate.boundValueOps("name").set("HelloWorld");
    }

    /**
     * 获取值
     */
    @Test
    public void getValue(){
        String str = (String) redisTemplate.boundValueOps("name").get();
        System.out.println(str);
    }

    /**
     * 删除值
     */
    @Test
    public void deleteValue(){
        redisTemplate.delete("name");
    }

    /**
     * 设置到期时间
     */
    @Test
    public void setExpireValue(){
        BoundValueOperations demo = redisTemplate.boundValueOps("demo");
        demo.set("Hello-World");
        demo.expire(30, TimeUnit.SECONDS);
    }

    @Test
    public void getExpireValue(){
        System.out.println(redisTemplate.boundValueOps("demo").get());
    }


    /**
     * Set类型操作
     */

    /**
     * 往set集合添加值
     */
    @Test
    public void setSetValue(){
        redisTemplate.boundSetOps("names").add("zhangsan","lisi","wangwu","zhaoliu");
    }

    /**
     * 获取set集合值
     */
    @Test
    public void getSetValue(){
        Set names = redisTemplate.boundSetOps("names").members();
        for (Object name : names) {
            System.out.println(name.toString());
        }
    }

    /**
     * 删除set中的一个值
     */
    @Test
    public void removeSetValue(){
        redisTemplate.boundSetOps("names").remove("zhangsan");
    }

    /**
     * 删除set集合所有值
     */
    @Test
    public void deleteSetValue(){
        redisTemplate.delete("names");
    }

    /**
     * List类型操作
     */


    /**
     * 右压栈:后添加的对象排在后边
     */
    @Test
    public void setListRightPush(){
        redisTemplate.boundListOps("namesList").rightPush("zhangsan");
        redisTemplate.boundListOps("namesList").rightPush("lisi");
        redisTemplate.boundListOps("namesList").rightPush("wangwu");
        redisTemplate.boundListOps("namesList").rightPush("zhaoliu");
    }

    /**
     * 左压栈:后添加的对象排在前边
     */
    @Test
    public void setListLeftPush(){
        redisTemplate.boundListOps("namesList").rightPush("zhangsan");
        redisTemplate.boundListOps("namesList").rightPush("lisi");
        redisTemplate.boundListOps("namesList").rightPush("wangwu");
        redisTemplate.boundListOps("namesList").rightPush("zhaoliu");
    }

    /**
     * 获取List内的值
     */
    @Test
    public void getListValue(){
        List namesList = redisTemplate.boundListOps("namesList").range(0, 10000);
        for (Object o : namesList) {
            System.out.println(o);
        }
    }

    /**
     * 查询集合某个元素
     */
    @Test
    public void getOne(){
        Object index = redisTemplate.boundListOps("namesList").index(0);
        System.out.println(index);
    }

    /**
     * 移除集合某个元素
     */
    @Test
    public void removeOne(){
        Long remove = redisTemplate.boundListOps("namesList").remove(0, "zhangsan");
        System.out.println(remove);
    }


    /**
     * Hash类型操作
     */


    /**
     * 添加值
     */
    @Test
    public void setHashValue(){
        redisTemplate.boundHashOps("namesHash").put("name","zhangsan");
        redisTemplate.boundHashOps("namesHash").put("age",18);
        redisTemplate.boundHashOps("namesHash").put("hobby","football");
    }

    /**
     * 获取所有值
     */
    @Test
    public void getHashValue(){
        Map namesHash = redisTemplate.boundHashOps("namesHash").entries();
        for (Object o : namesHash.keySet()) {
            System.out.println(o.toString() + " " + namesHash.get(o.toString()));
        }
    }

    /**
     * 根据KEY提取值
     */
    @Test
    public void getValueByKey(){
        String o = (String) redisTemplate.boundHashOps("namesHash").get("name");
        System.out.println(o);
    }

    /**
     * 根据KEY移除值
     */
    @Test
    public void deleteValueByKey(){
        redisTemplate.boundHashOps("namesHash").delete("name");
    }
}

对于String密集型操作,可以使用StringRedisTemplate

2.3使用StringRedisTemplate操作对象

StringRedisTemplate主要用于操作String类型的数据

2.3.1在spring-redis.xml中添加

    <!--StringRedisTemplate-->
    <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory" />
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
        </property>
        <!--开启事务  -->
        <property name="enableTransactionSupport" value="true"></property>
    </bean>

2.3.1例子

StringRedisTemplate操作基本与RedisTemplate一样只是操作的数据类型不同

/**
 * @author LGX_TvT
 * @date 2018-08-15 21:24
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-redis.xml")
public class StringRedisTemplateExample {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void setValue(){
        stringRedisTemplate.boundValueOps("demo").set("HelloWorld");
    }

    @Test
    public void getValue(){
        String demo = stringRedisTemplate.boundValueOps("demo").get();
        System.out.println(demo);
    }
}

二,SpringBoot使用Redis简单介绍

基本结构

这里写图片描述

1.环境搭建

1.1使用Spring Initializer快速搭建

步骤:
勾选web,redis即可
这里写图片描述

1.2使用配置文件或配置类配置基本信息

1.2.1 使用配置文件

application.properties

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=

1.2.2使用配置类

/**
 * @author LGX_TvT
 * @date 2018-08-15 22:22
 */
@Configuration
public class RedisConfig {

    /**
     * 配置Jedis连接池管理工厂
     * @return
     */
    @Bean
    public JedisConnectionFactory jedisConnectionFactory(){
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("127.0.0.1",6379);
        return new JedisConnectionFactory(config);
    }

}

2.简单使用

要想使用缓存需要先使用@EnableCaching开启缓存

这里写图片描述

2.1 例子

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

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void contextLoads() {
        redisTemplate.boundValueOps("demo").set("HelloWorld");
    }

    @Test
    public void getValue(){
        System.out.println(redisTemplate.boundValueOps("demo").get());
    }

}

【参考文章】
https://www.cnblogs.com/phil_jing/p/7468586.html

猜你喜欢

转载自blog.csdn.net/l1336037686/article/details/81609833