zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    JavaScript中创建对象的几种模式
    Vue学习5:条件渲染
    Vue学习4:class与style绑定
    Vue学习3:计算属性computed与监听器
    Vue学习2:模板语法
    普通递归与优化递归
    new操作符具体干了什么呢?
    各种形式存放token
    用es6的Array.reduce()方法计算一个字符串中每个字符出现的次数
    ES6 对象的解构赋值
  • 原文地址:https://www.cnblogs.com/chenpi/p/6329636.html
Copyright © 2011-2022 走看看