关于springboot使用redis的信息

本篇文章给大家谈谈springboot使用redis,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Springboot使用redis的setnx和getset实现并发锁、分布式锁

在日常开发中,很多业圆搏务场景必须保证原子性。举几个例子:

如果你只有一台服务器,只运行一个Java程序,那么可以使用Java语言自身的一些锁来实现原子性。但如果我们有多台服务器,甚至不同服务器上跑的是不同的语言。那这时候,我们就需要一个跨平台、跨语言的加锁方式。redis就是其中最方便的一种。

使用redis实现并发锁,主要是靠两个redis的命令:setnx和getset。

那我们的设计思路就是:

上面的代码使用了一个RedisService的类薯升,里面主要是简单封装了一数腔老下redis的操作,你可以替换为自己的service。代码如下:

以上代码有任何疑问,可以点击右侧边栏联系作者。收费5毛~交个朋友,欢迎来撩!

版权声明:《Springboot使用redis的setnx和getset实现并发锁、分布式锁》为CoderBBB作者「ʘᴗʘ」的原创文章,转载请附上原文出处链接及本声明。

原文链接:

[img]

springboot--redis配置

基于spring.version:4.x;

4.2.4.RELEASE

不同spring版本敏枯世对应的redis版本也不一败慎样,配置桥肢类也会不同。

添加pom:

redis参数配置:RedisConfig.class

redis配置类:RedisConfiguration.class

redis工具类:redisUtils.class

示例使用

3分钟搞定springboot整合redis

不多说直接上代码:

!-- redis --

dependency

groupIdorg.springframework.boot/groupId

artifactIdspring-boot-starter-data-redis/artifactId

exclusions

exclusion

groupIdredis.clients/groupId

artifactIdjedis/artifactId

/exclusion

exclusion

groupIdio.lettuce/groupId

artifactIdlettuce-core/artifactId

/exclusion

/exclusions

/dependency

!-- 添加jedis客户端 --

dependency

groupIdredis.clients/groupId

artifactIdjedis/artifactId

/dependency

!--spring2.0集成redis所需common-pool2--

!-- 必须加上,jedis依赖此 --

dependency

groupIdorg.apache.commons枯卖/groupId

artifactIdcommons-pool2/artifactId

version2.5.0/version

/dependency

!-- 将作为Redis对象序列化器 --

dependency

groupIdcom.alibaba/groupId

artifactIdfastjson/artifactId

version1.2.47/version

/dependency

#Matser的ip地址

redis.hostName=172.16.44.148

#端口号

redis.port=6379

#如果有密码

redis.password=

#客户端超时时间单位是毫秒 默认是2000

redis.timeout=10000

#最大空闲数

redis.maxIdle=300

#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal

#redis.maxActive=600

#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性

redis.maxTotal=1000

#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。

redis.maxWaitMillis=1000

#连接的最小空闲卖没时间没配逗 默认1800000毫秒(30分钟)

redis.minEvictableIdleTimeMillis=300000

#每次释放连接的最大数目,默认3

redis.numTestsPerEvictionRun=1024

#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1

redis.timeBetweenEvictionRunsMillis=30000

#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个

redis.testOnBorrow=true

#在空闲时检查有效性, 默认false

redis.testWhileIdle=true

package com.junsi.demo.config;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.PropertySource;

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.serializer.GenericJackson2JsonRedisSerializer;

import org.springframework.data.redis.serializer.StringRedisSerializer;

import com.junsi.demo.utils.RedisUtil;

import redis.clients.jedis.JedisPoolConfig;

/**

* Redis配置类

* @author pzx

* 2019年6月8日

*/

@Configuration

@PropertySource("classpath:redis.properties")

public class RedisConfig {

@Value("${redis.maxIdle}")

private Integer maxIdle;

@Value("${redis.maxTotal}")

private Integer maxTotal;

@Value("${redis.maxWaitMillis}")

private Integer maxWaitMillis;

@Value("${redis.minEvictableIdleTimeMillis}")

private Integer minEvictableIdleTimeMillis;

@Value("${redis.numTestsPerEvictionRun}")

private Integer numTestsPerEvictionRun;

@Value("${redis.timeBetweenEvictionRunsMillis}")

private long timeBetweenEvictionRunsMillis;

@Value("${redis.testOnBorrow}")

private boolean testOnBorrow;

@Value("${redis.testWhileIdle}")

private boolean testWhileIdle;

@Value("${spring.redis.cluster.nodes}")

private String clusterNodes;

@Value("${spring.redis.cluster.max-redirects}")

private Integer mmaxRedirectsac;

/**

* JedisPoolConfig 连接池

* @return

*/

@Bean

public JedisPoolConfig jedisPoolConfig() {

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

// 最大空闲数

jedisPoolConfig.setMaxIdle(maxIdle);

// 连接池的最大数据库连接数

jedisPoolConfig.setMaxTotal(maxTotal);

// 最大建立连接等待时间

jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);

// 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)

jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);

// 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3

jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);

// 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1

jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);

// 是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个

jedisPoolConfig.setTestOnBorrow(testOnBorrow);

// 在空闲时检查有效性, 默认false

jedisPoolConfig.setTestWhileIdle(testWhileIdle);

return jedisPoolConfig;

}

/**

* @param jedisPoolConfig

* @return

*/

@Bean

public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig){

JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);

//连接池

JedisConnectionFactory.setPoolConfig(jedisPoolConfig);

//IP地址

JedisConnectionFactory.setHostName("172.16.44.148");

//端口号

JedisConnectionFactory.setPort(6379);

//如果Redis设置有密码

//JedisConnectionFactory.setPassword(password);

//客户端超时时间单位是毫秒

JedisConnectionFactory.setTimeout(5000);

return JedisConnectionFactory;

}

/**

* 实例化 RedisTemplate 对象

*

* @return

*/

@Bean

public RedisTemplateString, Object functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {

RedisTemplateString, Object redisTemplate = new RedisTemplate();

initDomainRedisTemplate(redisTemplate, redisConnectionFactory);

return redisTemplate;

}

/**

* 设置数据存入 redis 的序列化方式,并开启事务

*

* @param redisTemplate

* @param factory

*/

private void initDomainRedisTemplate(RedisTemplateString, Object redisTemplate, RedisConnectionFactory factory) {

//如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!

redisTemplate.setKeySerializer(new StringRedisSerializer());

redisTemplate.setHashKeySerializer(new StringRedisSerializer());

redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

// 开启事务

redisTemplate.setEnableTransactionSupport(true);

redisTemplate.setConnectionFactory(factory);

}

@Bean(name = "redisUtil")

public RedisUtil redisUtil(RedisTemplateString, Object redisTemplate) {

RedisUtil redisUtil = new RedisUtil();

redisUtil.setRedisTemplate(redisTemplate);

return redisUtil;

}

}

SpringBoot连接redis哨兵模式

设置 sentinel-26377.conf 的 protected-mode no ;默认是该字段值是yes

修改问题[1]中为redis集群master节点的真实地址;

修改问题[2]中为 bind 0.0.0.0

【注】redisTemplate实际上是对其他哗颂咐框架的的封装,springboot2.x以上底层实现由jedis变为了lettuce。而且lettuce会根据樱亩配置自动选择是否用单机或者哨兵模式。

【1】 Redis 哨兵模式 设置密码

【2】 sentinel搭建redis集群经验总结

【3】SpringBoot2.x使用乱纯Lettuce连接redis哨兵报错:RedisConnectionException: Unable to connect to 127.0.0.1:16379]:

【4】解决使用jedis连接是报DENIED Redis is running in protected mode错误:

关于springboot使用redis和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

相关阅读

  • 数据存储(数据存储华为数据存储)

    数据存储(数据存储华为数据存储)

    数据存储在IT技术中扮演着非常重要的角色,它指的是将数据保存在计算机或服务器的存储设备中,以便日后进行访问和处理。数据存储是计算机系统中的一个基本组成部分,对于企业和个人用户来说都是至关重要的。在本文中,我们将深入探讨数据存储的重要性、常见...

    2024.04.12 18:00:34作者:intanet.cnTags:数据存储
  • 包含awsredis的词条

    包含awsredis的词条

    AWS Redis是一种云端的Redis管理服务,能够提供高性能的内存数据库,用来加速应用程序、增加应用程序缓存、实现消息传递、实现任务队列等功能。AWS Redis可以帮助开发者更轻松地构建可靠、高性能的应用程序。# 什么是AWS Red...

    2024.04.12 16:22:18作者:intanet.cnTags:awsredis
  • mongodb怎么读(mongodb中文)

    mongodb怎么读(mongodb中文)

    MongoDB是一种流行的NoSQL数据库管理系统,它使用文档存储结构,为开发人员提供了灵活性和性能。本文将介绍如何读取MongoDB中的数据。# 连接到MongoDB数据库首先,我们需要连接到MongoDB数据库。可以使用MongoDB官...

    2024.04.12 16:11:11作者:intanet.cnTags:mongodb怎么读
  • 关于redishdel的信息

    关于redishdel的信息

    简介:Redishdel是一种IT技术工具,被广泛应用于数据存储和缓存管理领域。它以高效的内存数据库系统著称,通过使用快速的数据结构和灵活的命令功能,帮助用户提升数据处理效率和性能。多级标题:1. Redishdel的特点2. Redish...

    2024.04.12 16:00:42作者:intanet.cnTags:redishdel
  • mysqlupdate(MySQL update set)

    mysqlupdate(MySQL update set)

    简介:MySQL是一种广泛使用的开源关系型数据库管理系统,用来管理和存储数据。在数据库操作中,数据库的更新是很常见的操作之一。而MySQL提供了多种更新数据的方法,其中包括使用UPDATE语句进行数据更新操作。本文将介绍MySQL更新数据的...

    2024.04.12 09:55:26作者:intanet.cnTags:mysqlupdate
  • mysql服务(mysql服务怎么删除)

    mysql服务(mysql服务怎么删除)

    **简介:**MySQL是一种关系型数据库管理系统,广泛应用于互联网应用和大型企业级系统中。它是开源软件,具有稳定性高、性能优异、功能强大等特点,被广泛应用于各种企业级系统的数据存储和管理中。**多级标题:**一、MySQL服务的架构二、M...

    2024.04.12 02:22:25作者:intanet.cnTags:mysql服务
  • 分布式系统架构(分布式的架构)

    分布式系统架构(分布式的架构)

    分布式系统架构简介:随着IT技术的不断发展,分布式系统架构在当今互联网行业中变得越来越重要。分布式系统架构是将系统的各个部分分散在不同的计算机或服务器上,这样可以提高系统的可靠性、可扩展性和性能。本文将详细说明分布式系统架构的定义、特点和应...

    2024.04.11 18:33:28作者:intanet.cnTags:分布式系统架构
  • oracle8.1.7下载(oracle最新版本下载)

    oracle8.1.7下载(oracle最新版本下载)

    标题:Oracle 8.1.7下载简介:Oracle 8.1.7是一款被广泛使用的数据库管理系统软件,它具有稳定性高、性能优异、功能强大等特点。许多企业和开发者都选择使用Oracle 8.1.7来管理他们的数据库。在本文中,将介绍如何下载O...

    2024.04.11 18:22:14作者:intanet.cnTags:oracle8.1.7下载