java、spring、springboot中整合Redis的详细讲解

 更新时间:2021年4月2日 15:00  点击:2220

java整合Redis

1、引入依赖或者导入jar包

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

2、代码实现

public class JedisTest {
  public static void main(String[] args) {
    //连接redis
    //Jedis jedis=new Jedis("192.168.65.128",6379);

    //使用Jedis连接池
    Jedis jedis=getJedis();
    //操作redis
    jedis.set("name","小白");
    jedis.set("age","19");
    System.out.println("操作成功!");
    jedis.close();
  }

  public static Jedis getJedis(){
    //创建连接池配置对象
    JedisPoolConfig config=new JedisPoolConfig();
    config.setMaxIdle(10);
    config.setMinIdle(5);
    config.setMaxTotal(100);
    //需要redis的服务密码时,使用第一种创建方式
    //JedisPool jedisPool=new JedisPool(config,"192.168.65.128",6379,10000,"root");
    JedisPool jedisPool=new JedisPool(config,"192.168.65.128",6379,10000);
    return jedisPool.getResource();
  }
}

Spring整合Redis

1、添加依赖

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-redis</artifactId>
  <version>2.1.8.RELEASE</version>
</dependency>

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

2、redis配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <!--1、配置redis连接池对象-->
  <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <!--最大空闲数-->
    <property name="maxIdle" value="50"/>
    <!--最大连接数-->
    <property name="maxTotal" value="100"/>
    <!--最大等待时间-->
    <property name="maxWaitMillis" value="60000"/>
  </bean>

  <!--2、配置redis连接工厂-->
  <bean id="factory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <!--连接池的配置-->
    <property name="poolConfig" ref="poolConfig"/>
    <!--连接主机-->
    <property name="hostName" value="192.168.65.128"/>
    <!--端口-->
    <property name="port" value="6379"/>
    <!--密码-->
    <!--
    当出现以下错误时,说明并不需要设置密码
    Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
    -->
    <!--<property name="password" value="root"/>-->
  </bean>

  <!--3、配置redis模板对象-->
  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <!--配置连接工厂-->
    <property name="connectionFactory" ref="factory"/>
  </bean>
</beans>

3、注入模板对象

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:application-redis.xml")
public class RedisTest {
  @Autowired
  private RedisTemplate redisTemplate;

  @Test
  public void test(){
    //redisTemplate.opsForValue().set("name","小黑");
    Object name = redisTemplate.opsForValue().get("name");
    System.out.println(name);
    System.out.println("操作完成");
  }
}

注意:使用Spring(SpringBoot)整合redis后,RedisTemplate对象会自带key和value的序列化功能。在redis的客户端操作时,获取的key是被序列化后的key.

思考:为什么Spring要提供一个序列化的功能? 为了开发者方便将对象存入redis中。可在xml中配置自定义的序列化类型。

 <!--3、配置redis模板对象-->
  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <!--配置连接工厂-->
    <property name="connectionFactory" ref="factory"/>
    <!--配置String类型的key value序列化方式  当存储的key是String类型时,则vlaue也是String类型,且key和value不被序列化-->
    <property name="keySerializer" ref="stringRedisSerializer"/>
    <property name="valueSerializer" ref="stringRedisSerializer"/>
  </bean>
  <!--自定义序列化类型-->
  <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
  <!--默认的jdk序列化-->
  <bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>

springboot整合Redis

1、添加依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、配置application.yml

3、注入模板对象

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringbootRedisApplicationTests {

  @Autowired
  private RedisTemplate redisTemplate;

  @PostConstruct
  public void init(){
    //配置String类型的key value序列化方式
    redisTemplate.setStringSerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(new StringRedisSerializer());
  }

  @Test
  void contextLoads() {
    redisTemplate.opsForValue().set("age",12);
    Object age = redisTemplate.opsForValue().get("age");
    System.out.println(age);
    System.out.println("操作成功");
  }

 //获取几种数据结构的对象
  @Test
  public void getRedisType(){
    //1、操作字符串数据类型
    redisTemplate.opsForValue();
    //2、操作hash的数据类型
    redisTemplate.opsForHash();
    //3、操作List的数据类型
    redisTemplate.opsForList();
    //4、操作Set的数据类型
    redisTemplate.opsForSet();
    //5、操作hSet的数据类型
    redisTemplate.opsForZSet();
    //6、操作基数的数据类型
    redisTemplate.opsForHyperLogLog();
  }
}

注意:不能在yml配置文件中配置自定义序列化,可以在springboot启动类或者测试类中,通过@PostConstruct注解来触发执行方法,从而达到配置自定义序列化的效果。

补充:

1.@PostConstruct说明
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。
2.@PreDestroy说明
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。

总结

1、当项目报以下错误:Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
报错的原因:是redis服务没设置密码,而项目配置文件中写了有redis密码
解决方案:
1)把项目配置文件中的密码password设置为空或者不设置。
2)设置redis服务密码
——可通过直接修改redis.conf配置文件中的requirepass属性方式,如果修改不生效,可通过命令方式修改,进入redis的客户端

redis 127.0.0.1:6379> CONFIG SET requirepass “root”
OK
redis 127.0.0.1:6379> AUTH root
Ok

然后重启项目就可以连接本机的redis服务了。

到此这篇关于java、spring、springboot中整合Redis的详细讲解的文章就介绍到这了,更多相关java springboot整合Redis内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • Java实现经典游戏复杂迷宫

    这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
  • java 运行报错has been compiled by a more recent version of the Java Runtime

    java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01
  • 在java中获取List集合中最大的日期时间操作

    这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • Spring AOP 对象内部方法间的嵌套调用方式

    这篇文章主要介绍了Spring AOP 对象内部方法间的嵌套调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-29
  • 解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题

    这篇文章主要介绍了解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-28
  • Spring Cloud 中@FeignClient注解中的contextId属性详解

    这篇文章主要介绍了Spring Cloud 中@FeignClient注解中的contextId属性详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-25
  • Springboot如何实现Web系统License授权认证

    这篇文章主要介绍了Springboot如何实现Web系统License授权认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-28
  • Java如何发起http请求的实现(GET/POST)

    这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • 教你怎么用Java获取国家法定节假日

    这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
  • 浅谈Java与C#的一些细微差别

    说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • 解决Java处理HTTP请求超时的问题

    这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • 如何在Spring WebFlux的任何地方获取Request对象

    这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26
  • java 判断两个时间段是否重叠的案例

    这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • 详解springBoot启动时找不到或无法加载主类解决办法

    这篇文章主要介绍了详解springBoot启动时找不到或无法加载主类解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-16
  • 详解SpringCloudGateway内存泄漏问题

    这篇文章主要介绍了详解SpringCloudGateway内存泄漏问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-16
  • 超简洁java实现双色球若干注随机号码生成(实例代码)

    这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
  • SpringBoot集成Redis实现消息队列的方法

    这篇文章主要介绍了SpringBoot集成Redis实现消息队列的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
  • java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01