YaxuSong

代码的世界我不懂.

  • 主页
  • 随笔
  • JAVA
  • Linux
  • ATLASSIAN
  • 简历
搜索 友请链接 关于我

YaxuSong

代码的世界我不懂.

  • 主页
  • 随笔
  • JAVA
  • Linux
  • ATLASSIAN
  • 简历

Redis在SpringBoot 2.0中的整合

2018-04-18

一、Redis的安装

为了方便教程这里先简单介绍Redis的安装。

1. windows平台的安装

现在官网已经不提供windows平台的下载,所以只能去github上下载安装
github下载网址
进入之后选择好版本点击msi下载
Redis
然后双击安装。
默认是直接运行的。
可以通过控制台访问如
Redis
具体语法可以在相关网上查阅。

2. Linux平台的安装

直接到官网下载
Redis.io
解压并安装

1
2
3
4
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
tar xzf redis-4.0.9.tar.gz
cd redis-4.0.9
make

服务端运行脚本

1
src/redis-server

客户端运行脚本

1
src/redis-cli

3. SpringBoot2.0相关配置

pom文件加入以下依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

我这里SpringBoot的配置文件使用的是YAML。
在相应环境中配置Redis

application-local.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spring:
datasource:
name: test
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/local?useUnicode=true&characterEncoding=UTF-8
username: root
password: root
redis:
database: 0
host: localhost
port: 6379
jedis:
pool:
min-idle: 0
max-idle: 8
max-active: 8
max-wait: -1ms

4.代码级别配置

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import com.xxx.controller.entry.entity.AccessToken;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.convert.KeyspaceConfiguration;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.util.Collections;

/**
* @Author :yaxuSong
* @Description:
* @Date: 18:35 2018/4/17
* @Modified by:
*/
@Configuration
@EnableCaching
//增加Respository支持,并使其支持@TimeToLive
@EnableRedisRepositories(keyspaceConfiguration = RedisCacheConfig.MyKeyspaceConfiguration.class)
public class RedisCacheConfig extends CachingConfigurerSupport{

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
return RedisCacheManager.builder(connectionFactory).build();
}

// @Bean
// public RedisConnectionFactory connectionFactory() {
// return new JedisConnectionFactory();
// }

@Bean
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}

// @Bean
// public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
// RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
// redisTemplate.setConnectionFactory(redisConnectionFactory);
// redisTemplate.setKeySerializer(new StringRedisSerializer());//key序列化
// redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); //value序列化
// redisTemplate.afterPropertiesSet();
// return redisTemplate;
// }

public static class MyKeyspaceConfiguration extends KeyspaceConfiguration {

@Override
protected Iterable<KeyspaceSettings> initialConfiguration() {
return Collections.singleton(new KeyspaceSettings(AccessToken.class, "accessToken"));
}
}
}

缓存对象AccessToken

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.TimeToLive;

/**
* @Author :yaxuSong
* @Description:
* @Date: 14:26 2018/4/18
* @Modified by:
*/
@RedisHash("accessToken")
@Data
public class AccessToken {
@Id
String id;
String accessToken;
@TimeToLive
Long expire;
}

创建Respository

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import com.xxx.controller.entry.entity.AccessToken;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

/**
* @Author :yaxuSong
* @Description:
* @Date: 14:34 2018/4/18
* @Modified by:
*/
@Repository
// 继承自CURD,里边有最基本的方法
public interface AccessTokenRepository extends CrudRepository<AccessToken, String> {

}

接下来完成自己的业务服务类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import com.xxx.controller.entry.entity.AccessToken;

/**
* @Author :yaxuSong
* @Description:
* @Date: 14:50 2018/4/18
* @Modified by:
*/
public interface AccessTokenService {

AccessToken save(AccessToken accessToken);

void delete(AccessToken accessToken);

AccessToken get(String id);
}

业务服务类的实现

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
import com.xxx.controller.entry.entity.AccessToken;
import com.xxx.dao.repository.AccessTokenRepository;
import com.xxx.service.AccessTokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
* @Author :yaxuSong
* @Description:
* @Date: 14:52 2018/4/18
* @Modified by:
*/
@Service("accessTokenService")
public class AccessTokenServiceImpl implements AccessTokenService {

@Autowired
private AccessTokenRepository repo;

@Override
public AccessToken save(AccessToken accessToken) {
return repo.save(accessToken);
}

@Override
public void delete(AccessToken accessToken) {
repo.delete(accessToken);
}

@Override
public AccessToken get(String id) {
Optional<AccessToken> accessToken = repo.findById(id);
return accessToken.orElse(null);
}
}

以上完成了整个整合过程。

5. 简单的测试

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
import com.xxx.controller.entry.entity.AccessToken;
import com.xxx.service.AccessTokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Author :yaxuSong
* @Description:
* @Date: 15:16 2018/4/18
* @Modified by:
*/
@RestController
@RequestMapping("test")
public class TestController {

@Autowired
private AccessTokenService accessTokenService;

@RequestMapping("add")
public String test(){
AccessToken accessToken = new AccessToken();
accessToken.setAccessToken("dadaadadsdadewqeqfskksdbfdbkfsdkdajdhwke2elhsbcslc/DNDAWDAWWAFEWFSD23E2342");
accessToken.setExpire(60L);
//单位 秒
AccessToken at = accessTokenService.save(accessToken);
return "成功"+"键值为:"+at.getId();
}
@RequestMapping("get")
public String get(String id){
AccessToken accessToken = accessTokenService.get(id);
return accessToken==null?"已过期":accessToken.toString();
}
}

测试结果:

Redis

我这里添加了一个过期时间为60s的token。
我们通过查看可以看到时间的变化

第一次查询:
Redis
第二次查询:
Redis
第三次查询:
Redis

我们查看下本地Rdis所有键值情况:
Redis
过一段时间后查询:
Redis
我们发现之前还存在键值id为c07cde6a-aec7-40f3-ad39-41862209bc9f的,但是内容没有了。
后来查询的就被删除了(过期后不会直接删除,会稍有延迟,只有id存在,其他都已被删除)

我们看到键值为:d2b97d54-1c8b-4803-8f60-6aaf3384fc32的是我之前存的TTL=7200s的。
Redis

至此所有相关的内容就介绍完了。

本文参考地址:Spring-data-redis

赏

谢谢你请我吃糖果

支付宝
微信
  • Java

扫一扫,分享到微信

微信分享二维码
Kafka在SpringBoot 2.0中的整合
好久都没有发表博客了
  1. 1. 一、Redis的安装
    1. 1.1. 1. windows平台的安装
    2. 1.2. 2. Linux平台的安装
    3. 1.3. 3. SpringBoot2.0相关配置
      1. 1.3.0.1. application-local.yml
  2. 1.4. 4.代码级别配置
  3. 1.5. 5. 简单的测试
Like Issue Page
Error: Not Found
Login with GitHub
Styling with Markdown is supported
Powered by Gitment
© 2019 YaxuSong
Hexo Theme Yilia by Litten
  • 搜索
  • 友请链接
  • 关于我

tag:

  • 随笔
  • ATLASSIAN
  • 读书笔记
  • Java
  • Linux
  • JAVA

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • jira-managing-project-permissions

    2018-08-22

    #读书笔记

  • SpringBoot使用Swagger2

    2018-06-10

    #JAVA

  • Redisson 的介绍与使用

    2018-06-04

    #JAVA

  • Spring Boot 关乎java程序员

    2018-05-16

    #JAVA

  • Kafka在SpringBoot 2.0中的整合-1

    2018-05-07

    #JAVA

  • 微信公众号后台在SpringBoot2.0中的实现(上)

    2018-05-01

    #JAVA

  • Kafka在SpringBoot 2.0中的整合

    2018-04-23

    #Java

  • Redis在SpringBoot 2.0中的整合

    2018-04-18

    #Java

  • 好久都没有发表博客了

    2018-04-18

    #随笔

  • 使用Xtrabackup备份InnoDB(MySQL)

    2018-03-06

    #Linux

  • LinuxMySQL的安装(3)

    2018-02-08

    #Linux

  • Linux下MySQL主从数据库的安装与配置

    2018-02-08

    #Linux

  • Linux离线安装Nginx

    2018-02-07

    #Linux

  • Linux定时任务备份mysql和数据

    2018-02-06

    #ATLASSIAN#Linux

  • 回家过年前一周

    2018-02-05

    #随笔

  • LinuxMySQL的安装(2)

    2018-02-02

    #ATLASSIAN#Linux

  • Atlassian产品设置JVM

    2018-01-31

    #读书笔记

  • Crucible安装

    2018-01-29

    #读书笔记

  • 当璀璨速朽成尘埃

    2018-01-25

    #读书笔记

  • JIRA高于7.2版本导出xlsx格式的EXCEL文件

    2018-01-22

    #ATLASSIAN

  • Linux离线git的安装

    2018-01-17

    #Linux

  • 终于复活啦

    2018-01-15

    #随笔

  • LinuxMySQL的安装(1)

    2018-01-15

    #ATLASSIAN#Linux

  • Bitbucket的安装

    2018-01-15

    #ATLASSIAN

  • JIRA修改license

    2018-01-11

    #ATLASSIAN

  • rsync的使用与配置

    2018-01-09

    #Linux

  • 最近电脑重装了,导致电脑里边的博客全没了

    2018-01-08

    #随笔

  • JIRA安装

    2017-12-15

    #ATLASSIAN

  • Nginx代理Atlassian产品(2):Use Domain:*.mydomain.com

    2017-12-13

    #ATLASSIAN

  • Nginx代理Atlassian产品(1):Use Domain:www.mydomain.com/*

    2017-12-13

    #ATLASSIAN

  • Atlassian产品使用单点登陆-SSO

    2017-12-13

    #ATLASSIAN

  • Atlassian产品安装环境准备-数据库(1):MySQL

    2017-12-11

    #ATLASSIAN

  • 《Thinking in java》读书笔记(23)

    2017-11-24

    #读书笔记#Java

  • 《Thinking in java》读书笔记(22)

    2017-11-24

    #读书笔记#Java

  • Java工程师成神之路

    2017-11-24

    #Java

  • say something to myself

    2017-11-23

    #随笔

  • 怀念那些我喜欢的经典

    2017-10-25

    #随笔

  • 《Thinking in java》读书笔记(21)

    2017-10-24

    #读书笔记#Java

  • 国庆快乐

    2017-10-01

    #随笔

  • 《Thinking in java》读书笔记(20)

    2017-09-30

    #读书笔记#Java

  • 《Thinking in java》读书笔记(19)

    2017-09-27

    #读书笔记#Java

  • 《Thinking in java》读书笔记(18)

    2017-09-18

    #读书笔记#Java

  • 《Thinking in java》读书笔记(17)

    2017-09-18

    #读书笔记#Java

  • 《Thinking in java》读书笔记(16)

    2017-09-11

    #读书笔记#Java

  • 回忆总是会使我泪流满面

    2017-09-05

    #随笔

  • 迷茫

    2017-09-01

    #随笔

  • 一个人的情人节

    2017-08-28

    #随笔

  • 没有什么事情是办不到的,只怕你没法战胜自己

    2017-08-23

    #随笔

  • 感觉最近有点霉运

    2017-08-07

    #随笔

  • 确实感觉还是有点小累的

    2017-08-04

    #随笔

  • 难受

    2017-08-01

    #随笔

  • 《Thinking in java》读书笔记(15)

    2017-08-01

    #读书笔记#Java

  • 感觉慢慢的步入正轨了

    2017-07-31

    #随笔

  • 每次写标题都很困难啊

    2017-07-24

    #随笔

  • 2017.07.18记

    2017-07-18

    #随笔

  • 《Thinking in java》读书笔记(14)

    2017-07-14

    #读书笔记#Java

  • 停更ThinKing in Java的读书笔记

    2017-07-11

    #读书笔记

  • 做决定看似简单其实很难

    2017-07-05

    #随笔

  • 《Thinking-in-java》读书笔记(13)

    2017-06-23

    #读书笔记#Java

  • 《Thinking in java》读书笔记(12)

    2017-06-22

    #读书笔记#Java

  • 《Thinking in java》读书笔记(11)

    2017-06-22

    #读书笔记#Java

  • 《Thinking in java》读书笔记(10)

    2017-06-21

    #读书笔记#Java

  • 《Thinking in java》读书笔记(9)

    2017-06-17

    #读书笔记#Java

  • 《Thinking in java》读书笔记(8)

    2017-06-15

    #读书笔记

  • 《Thinking in java》读书笔记(7)

    2017-06-14

    #读书笔记

  • 一些想法

    2017-06-14

    #随笔

  • 《Thinking in java》读书笔记(6)

    2017-06-12

    #读书笔记#Java

  • 《Thinking in java》读书笔记(5)

    2017-06-10

    #读书笔记#Java

  • 《Thinking in java》读书笔记(4)

    2017-06-07

    #读书笔记#Java

  • 决定

    2017-06-07

    #随笔

  • 《Thinking in java》读书笔记(3)

    2017-06-06

    #读书笔记#Java

  • 听完这首歌忘记所有的一切

    2017-06-05

    #随笔

  • 《Thinking in java》读书笔记(2)

    2017-06-04

    #读书笔记#Java

  • 《Thinking in java》读书笔记(1)

    2017-06-01

    #读书笔记#Java

  • 六一儿童节快乐

    2017-06-01

    #随笔

  • The mood may be better

    2017-05-31

    #随笔

  • NoTitle

    2017-05-27

    #随笔

  • 努力吧,少年

    2017-05-26

    #随笔

  • 想念那些日子

    2017-05-08

    #随笔

  • 此时此刻的心情

    2017-05-04

    #随笔

  • welcome

    2017-05-03

    #随笔

  • Leno's Blog
  • GitHub
  • CSDN博客
  • 国内站点(同站)
宋亚旭,就读于内蒙古大学软件工程专业,在大学期间就很喜欢写代码,现在在一家公司做Java后端工作。