Spring Data Redis示例

說明

關於Redis:一個基於鍵值對存儲的NoSQL內存數據庫,可存儲複雜的數據結構,如List, Set, Hashesjava

關於Spring Data Redis:簡稱SDR, 能讓Spring應用更加方便配置和訪問Redis。git

本工程基於spring boot ,spring data redis,  spring io platform實現。github

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數據庫。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數據。spring

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服務;數據庫

一、查看當前全部用戶apache

二、存入三個用戶數據結構

三、查看ID爲3的用戶maven

四、查看全部用戶ide

五、刪除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/

相關文章
相關標籤/搜索