13. Spring Boot Redis

13.1. 开始使用Redis

13.2. Maven依赖

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>2.0.3.RELEASE</version>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <type>jar</type>
</dependency>

13.3. Configuration

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
@Bean
JedisConnectionFactory jedisConnectionFactory() {
    JedisConnectionFactory jedisConFactory
    = new JedisConnectionFactory();
    jedisConFactory.setHostName("localhost");
    jedisConFactory.setPort(6379);
    return jedisConFactory;
}

@Bean
public RedisTemplate<String, Object> redisTemplate() {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(jedisConnectionFactory());
    return template;
}

13.4. Demo

13.4.1. pom

1
2
3
4
5
6
7
8
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

13.4.2. entity

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.example.redis.entity;

public class User {

    private String id;
    private String name;
    private long followers;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getFollowers() {
        return followers;
    }

    public void setFollowers(long followers) {
        this.followers = followers;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", followers=" + followers + "]";
    }

}

13.4.3. repository

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.example.redis.repository;

import java.util.Map;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Repository;

import com.example.redis.entity.User;

@Repository
public class UserRepository {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private HashOperations<String, Object, Object> hashOperations;

    @PostConstruct
    private void init() {
        hashOperations = stringRedisTemplate.opsForHash();
    }

    public void setDatabase(int index) {
        LettuceConnectionFactory lettuceConnectionFactory = (LettuceConnectionFactory) stringRedisTemplate
                .getConnectionFactory();
        lettuceConnectionFactory.getStandaloneConfiguration().setDatabase(index);
        stringRedisTemplate.setConnectionFactory(lettuceConnectionFactory);
    }

    public void save(User user) {
        setDatabase(0);
        hashOperations.put("USER", user.getId(), user.toString());
    }

    public void delete(String id) {
        hashOperations.delete("USER", id);
    }

    public Map getUsers() {
        return hashOperations.entries("USER");
    }

}

13.4.4. controller

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.example.redis.controller;

import java.time.LocalTime;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.redis.entity.User;
import com.example.redis.repository.UserRepository;

@RestController
public class HelloWorldController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/")
    public ResponseEntity<Map> hello(String name) {
        User user = new User();
        user.setId(LocalTime.now().toString());
        user.setName("Murphy");
        user.setFollowers(33);
        userRepository.save(user);

        return ResponseEntity.ok(userRepository.getUsers());
    }
}

13.4.5. application.properties

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