欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot 整合Redis 数据库的方法

程序员文章站 2022-07-12 07:59:15
redis简介 redis(官网: )是一个基于内存的日志型可持久化的缓存数据库,保存形式为key-value格式,redis完全免费开源,它使用ansi c语言编写。...

redis简介

redis(官网: )是一个基于内存的日志型可持久化的缓存数据库,保存形式为key-value格式,redis完全免费开源,它使用ansi c语言编写。与其他的key - value缓存产品一样,redis具有以下三个特点。

• redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;

• redis不仅支持简单的key-value类型数据,同时还提供字符串、链表、集合、有序集合和哈希等数据结构的存储;

• redis支持数据备份,即master-slave模式的数据备份。

SpringBoot 整合Redis 数据库的方法 

在mac系统上,无需下载redis即可使用它,以下是从redis的托管服务器下载redis压缩包并解压的相关命令。

wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar xzf redis-4.0.8.tar.gz
cd redis-4.0.8
make

使用redis提供的服务之前,需要先启动redis相关的服务,在mac系统上启动redis的命令如下。

src/redis-server

SpringBoot 整合Redis 数据库的方法 

然后,重新打开一个redis客户端,使用以下的命令来连接redis server。

src/redis-cli
redis> set foo bar
ok
redis> get foo
"bar"

SpringBoot 整合Redis 数据库的方法 

整合redis 数据库

使用redis之前需要引入相关依赖,maven方式依赖的脚本如下:

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-data-redis</artifactid>
</dependency>

之后我们把redis的相关配置写入yml,这里建议根据之前不同的环境写入不同的配置,redis默认使用的端口是6379,通常redis默认使用0号数据库,默认共有16个数据库:

#redis配置
 redis:
# 数据库索引
  database: 0
#  服务器地址
  host: 127.0.0.1
#  服务器连接端口
  port: 6379
#  链接密码
  password:
#  链接池
  pool:
#  最大连接数(负值表示没有限制)
   max-active: 8
#   最大阻塞等待时间(负值表示没有限制)
   max-wait: 1
#   最大空闲链接
   max-idle: 8
#   最小空闲链接
   min-idle: 0
#  链接超时时间(毫秒)
  timeout: 0

如果是application.properties方式,部分配置如下:

spring.redis.hostname=127.0.0.1
spring.redis.port=6379  
spring.redis.pool.maxactive=8  
spring.redis.pool.maxwait=-1  
spring.redis.pool.maxidle=8  
spring.redis.pool.minidle=0  
spring.redis.timeout=0

新建redisconfig.java文件用来存放配置文件。

@configuration 
@enablecaching//开启注解 
public class redisconfig extends cachingconfigurersupport {
  @bean
  public cachemanager cachemanager(redistemplate<?,?> redistemplate) {
    cachemanager cachemanager = new rediscachemanager(redistemplate);
    return cachemanager;
  }
  @bean
  public redistemplate<string, string> redistemplate(redisconnectionfactory factory) {
    redistemplate<string, string> redistemplate = new redistemplate<string, string>();
    redistemplate.setconnectionfactory(factory);
    return redistemplate;
  }
}

在service包中建立一个redisservice.java类。

public interface redisservice {
  public void set(string key, object value); 
  public object get(string key); 
}

新建一个service实现类redisserviceimpl.java。

@service
public class redisserviceimpl implements redisservice {
  @resource
  private redistemplate<string,object> redistemplate;
  public void set(string key, object value) {
    valueoperations<string,object> vo = redistemplate.opsforvalue();
     vo.set(key, value);
  }
  public object get(string key) {
    valueoperations<string,object> vo = redistemplate.opsforvalue();
    return vo.get(key);
  }
}

新建controller层代码usercontroller.java

@controller
@requestmapping(path="/user")
public class usercontroller {
  @autowired
  private userservice userservice;
  @autowired
  private redisservice redisservice;
  //从redis获取某个用户
  @requestmapping(value = "/getuserfromredis", method = requestmethod.get)
  public @responsebody user getredis(@requestparam string key) {
    return (user)redisservice.get(key);
  }
  //获取所有用户
  @requestmapping(value = "/getusers", method = requestmethod.get)
  public @responsebody page<user> list(model model, pageable pageable){
    return userservice.findall(pageable); 
  }
  //添加用户
  @getmapping(value="/adduser")
  public @responsebody string adduser(@requestparam string dictum,
      @requestparam string password, @requestparam string username) {
    user user = new user();
    user.setdictum(dictum);
    user.setpassword(password);
    user.setusername(username);
    system.out.println(user);
    userservice.saveuser(user);
    redisservice.set(user.getid()+"", user);
    return "saved";
  }
}

本文设计的实体类user.java的代码如下,需要把对象存放在redis需要将对象序列化。

@entity
@table(name="s_user")
public class user implements serializable {
  private static final long serialversionuid = 1l;
  @id 
  @generatedvalue(strategy=generationtype.auto)
  private integer id;
  private string username;
  private string password;
  private string dictum;
  @onetomany(mappedby = "user", fetch = fetchtype. lazy, cascade = {cascadetype. all})
  private set<photo> setphoto;
  //省略getter和setter
  @override
  public string tostring() {
    return "user [id=" + id + ", username=" + username + ", password="
        + password + ", dictum=" + dictum + ", setphoto=" + setphoto
        + "]";
  }
}

总结

以上所述是小编给大家介绍的springboot 整合redis 数据库的方法,希望对大家有所帮助