服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java SpringBoot 集成 Redis详解

Java SpringBoot 集成 Redis详解

2022-02-19 14:52七元K Java教程

Redis 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语

1、概述

Redis是什么?

Redis(Remote Dictionary Server ),即远程字典服务。

是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis能该干什么?

  1. 内存存储、持久化,内存是断电即失的,所以需要持久化(RDB、AOF)
  2. 高效率、用于高速缓冲
  3. 发布订阅系统
  4. 地图信息分析
  5. 计时器、计数器(eg:浏览量)
  6. … …

特性

  1. 多样的数据类型
  2. 持久化
  3. 集群
  4. 事务

 

2、测试Redis

SpringBoot操作数据,Spring-Data、 jbdc、redis… …

SpringData与SpringBoot齐名的项目!

说明:在SpringBoot2.x之后,原来使用的jedis被替换为lettuce

jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,需使用jedis pool连接池!像BIO模式

lettuce:采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据,更像NIO模式

Java SpringBoot 集成 Redis详解

新建一个项目

Java SpringBoot 集成 Redis详解

Java SpringBoot 集成 Redis详解

注意:

Java SpringBoot 集成 Redis详解

查看底层

Java SpringBoot 集成 Redis详解

源码分析:

@Bean
@ConditionalOnMissingBean(  //如果未注入组件条件,我们自己可以定义一个redisTemplate来替换这个默认的
  name = {"redisTemplate"}
)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
  //默认的 RedisTemplate 没有过多的设置 redis 都是需要序列化的  !
  //两个泛型都是 Object  Object的类型,我们往后使用需要强制转换<String,String>
  RedisTemplate<Object, Object> template = new RedisTemplate();
  template.setConnectionFactory(redisConnectionFactory);
  return template;
}

@Bean
@ConditionalOnMissingBean  //由于String 是redis 中最常用的类型  所有说单独提出来一个bean!
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
  StringRedisTemplate template = new StringRedisTemplate();
  template.setConnectionFactory(redisConnectionFactory);
  return template;
}

1、导入依赖

2、配置连接

# SpringBoot 所有的配置类 都有一个自动配置类  RedisAutoConfiguration
# 自动配置类都会绑定一个 properties 配置文件  RedisProperties


#配置 redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

spring.redis

3、测试!

package com.kk;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
class Redis01SpringbootApplicationTests {

  @Autowired
  private RedisTemplate redisTemplate;

  @Test
  void contextLoads() {
      /*
      redisTemplate
      opsForValue  操作字符串的  类似String
      opsForList  操作List  类似List
      opsForSet
      opsForHash
      opsForZSet
      opsForGeo
      opsForHyperLogLog

      除了基本的操作 ,我们常用的方法都可以直接通过redisTemplate 比如事务和基本的CRUD


       */


      //获取redis的连接对象
//        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
//        connection.flushDb();
//        connection.flushAll();

      redisTemplate.opsForValue().set("kk1","kk2");
      System.out.println(redisTemplate.opsForValue().get("kk1"));

  }

}

Java SpringBoot 集成 Redis详解

 

3、自定义redisTemplate

首先先建一个实体类,测试

User类

package com.kk.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

import java.io.Serializable;

@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
//在企业中,我们所有的pojo都会序列化
public class User implements Serializable {
  private String name;
  private int age;
}

测试:

@Test
public void test() throws JsonProcessingException {
  //真实的开发一般都使用json来传递对象
  User user = new User("kk", 17);
  String jsonUser = new ObjectMapper().writeValueAsString(user);//这样就变成了一个json对象了
  redisTemplate.opsForValue().set("user",jsonUser);
  System.out.println(redisTemplate.opsForValue().get("user"));
}

r = new ObjectMapper().writeValueAsString(user);//这样就变成了一个json对象了
redisTemplate.opsForValue().set(“user”,jsonUser);
System.out.println(redisTemplate.opsForValue().get(“user”));
}

==注意:如果不在User类中实现序列化,它会报错==

到此这篇关于Java SpringBoot 集成 Redis详解的文章就介绍到这了,更多相关Java 集成 Redis内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_50569789/article/details/120716240

延伸 · 阅读

精彩推荐