当前位置: 首页 > 编程笔记 >

SpringBoot 整合Redis 数据库的方法

樊胜
2023-03-14
本文向大家介绍SpringBoot 整合Redis 数据库的方法,包括了SpringBoot 整合Redis 数据库的方法的使用技巧和注意事项,需要的朋友参考一下

Redis简介

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

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

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

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

 

在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

 

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

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

 

整合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 数据库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍SpringBoot整合Redis的步骤,包括了SpringBoot整合Redis的步骤的使用技巧和注意事项,需要的朋友参考一下 1.添加配置文件: Redis.properties 设置配置类: RedisConfig 2.将对象转化为Json格式入门案例 API: MAPPER.writeValueAsString(itemDesc); 3.将对象转化为Json格式格式优化 4.

  • 本文向大家介绍springboot整合redis进行数据操作(推荐),包括了springboot整合redis进行数据操作(推荐)的使用技巧和注意事项,需要的朋友参考一下 redis是一种常见的nosql,日常开发中,我们使用它的频率比较高,因为它的多种数据接口,很多场景中我们都可以用到,并且redis对分布式这块做的非常好。 springboot整合redis比较简单,并且使用redistemp

  • 本文向大家介绍springboot整合spring-data-redis遇到的坑,包括了springboot整合spring-data-redis遇到的坑的使用技巧和注意事项,需要的朋友参考一下 描述 使用springboot整合redis,使用默认的序列化配置,然后使用redis-client去查询时查询不到相应的key. 使用工具发现,key的前面多了\xAC\xED\x00\x05t\x00

  • 本文向大家介绍springboot与redis的简单整合实例,包括了springboot与redis的简单整合实例的使用技巧和注意事项,需要的朋友参考一下 前言 Redis是一个缓存、消息代理和功能丰富的键值存储。StringBoot提供了基本的自动配置。本文记录一下springboot与redis的简单整合实例 官方文档:https://docs.spring.io/spring-boot/do

  • 本文向大家介绍SpringBoot整合Lettuce redis过程解析,包括了SpringBoot整合Lettuce redis过程解析的使用技巧和注意事项,需要的朋友参考一下 首先解释一下Lettuce客户端: Lettuce 和 Jedis 的都是连接Redis Server的客户端程序。Jedis在实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个Jedi

  • 本文向大家介绍SpringBoot+Redis实现数据字典的方法,包括了SpringBoot+Redis实现数据字典的方法的使用技巧和注意事项,需要的朋友参考一下 前言 我们在日常的开发过程中针对一些字段采用整型的方式去代替某些具体的含义,比如性别0代表男,1代表女。如果只是一些不会变更的转译我们可以采用常量或者枚举类的方式来实现,但是事实上我们也会遇到那种可能需要变更的,显然这种场景下使用枚举类