Spring Data Redis示例

说明

关于Redis:一个基于键值对存储的NoSQL内存数据库,可存储复杂的数据结构,如List, Set, Hashes

关于Spring Data Redis:简称SDR, 能让Spring应用更加方便配置和访问Redis。

本工程基于spring boot ,spring data redis,  spring io platform实现。

POM配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.edu.hdu</groupId>
    <artifactId>examples.sdr</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>examples.sdr</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Athens-SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.4.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- Compile -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- Test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>examples.sdr</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.4.3.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            
        </plugins>
    </build>

</project>

配置RedisTemplate Bean

主要生成两个bean,JedisConnectionFactory 和 RedisTemplate,RedisTemplate bean用于后续注入到PersonRepoImpl中操作Redis数据库。

@Configuration
public class RedisConfig
{
    @Bean
    JedisConnectionFactory jedisConnectionFactory()
    {
        JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
        connectionFactory.setHostName("127.0.0.1");
        connectionFactory.setPort(6379);
        return new JedisConnectionFactory();
    }

    @Bean
    @Autowired
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory)
    {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        return template;
    }
        
}

使用RedisTemplate操作Redis

这里我们通过RedisTemplate得到HashOperations对象,使用该对象来存取Redis数据。

package cn.edu.hdu.examples.sdr.repo.impl;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;

import cn.edu.hdu.examples.sdr.bean.Person;
import cn.edu.hdu.examples.sdr.repo.PersonRepo;

@Repository
public class PersonRepoImpl implements PersonRepo {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    private static String PERSON_KEY = "Person";

    @Override
    public void save(Person person) {
        this.redisTemplate.opsForHash().put(PERSON_KEY, person.getId(), person);
    }

    @Override
    public Person find(String id) {
        return (Person) this.redisTemplate.opsForHash().get(PERSON_KEY, id);
    }

    @Override
    public Map<Object, Object> findAll() {
        return this.redisTemplate.opsForHash().entries(PERSON_KEY);
    }

    @Override
    public void delete(String id) {
        this.redisTemplate.opsForHash().delete(PERSON_KEY, id);

    }

}

测试

使用如下代码进行测试,运行前,请先运行本地redis服务;

1、查看当前所有用户

2、存入三个用户

3、查看ID为3的用户

4、查看所有用户

5、删除ID为2的用户后,查看剩余的用户

@SpringBootApplication
public class Application implements CommandLineRunner {
    @Autowired
    private PersonRepo personRepo;

    
    public void testHash(){
           Map<Object, Object> personMatrixMap = personRepo.findAll();
            System.out.println("@@当前Redis存储的所有用户:" + personMatrixMap);
            
            Person person = new Person();
            person.setId("1");
            person.setAge(55);
            person.setGender(Gender.Female);
            person.setName("Oracle");

            personRepo.save(person);

            Person person2 = new Person();
            person2.setId("2");
            person2.setAge(60);
            person2.setGender(Gender.Male);
            person2.setName("TheArchitect");

            personRepo.save(person2);

            Person person3 = new Person();
            person3.setId("3");
            person3.setAge(25);
            person3.setGender(Gender.Male);
            person3.setName("TheOne");

            personRepo.save(person3);

            System.out.println("查找ID为3的用户 : " + personRepo.find("3"));

            personMatrixMap = personRepo.findAll();

            System.out.println("当前Redis存储的所有用户:" + personMatrixMap);

            personRepo.delete("2");

            personMatrixMap = personRepo.findAll();

            System.out.println("删除ID为2的用户后,剩余的所有用户: " + personMatrixMap);
    }
    
    
    
    @Override
    public void run(String... args) throws Exception {
        this.testHash();

    }

    public static void main(String[] args) {
        // Close the context so it doesn't stay awake listening for redis
        SpringApplication.run(Application.class, args).close();

    }
}

结果打印:

@@当前Redis存储的所有用户:{}
查找ID为3的用户 : Person [id=3, name=TheOne, gender=Male, age=25]
当前Redis存储的所有用户:{2=Person [id=2, name=TheArchitect, gender=Male, age=60], 3=Person [id=3, name=TheOne, gender=Male, age=25], 1=Person [id=1, name=Oracle, gender=Female, age=55]}
删除ID为2的用户后,剩余的所有用户: {3=Person [id=3, name=TheOne, gender=Male, age=25], 1=Person [id=1, name=Oracle, gender=Female, age=55]}

也可以打开redis-cli手动输入key, 查看当前Redis存储结果:

剩下的两个用户为:{3=Person [id=3, name=TheOne, gender=Male, age=25], 1=Person [id=1, name=Oracle, gender=Female, age=55]}

例子源码

https://github.com/peterchenhdu/spring-data-redis-example

参考资料

https://examples.javacodegeeks.com/enterprise-java/spring/spring-data-redis-example/

 

posted @ 2017-01-21 10:31  风一样的码农  阅读(10199)  评论(0编辑  收藏  举报