添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文详细介绍了在Spring Boot中集成Redis的过程,包括配置文件的设置、连接池参数的理解及常见错误排查。解释了spring.redis.timeout和spring.redis.expire的具体含义,并提供了使用StringRedisTemplate解决乱码问题的方法。 摘要由CSDN通过智能技术生成

pom.xml中添加(默认是用lettuce,想用jedis需要排除掉lettuce):

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
	<exclusions>
		<exclusion>
			<groupId>io.lettuce</groupId>
			<artifactId>lettuce-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>

application.properties中添加:

spring.redis.database=0
spring.redis.host=47.104.176.200
spring.redis.port=6379
spring.redis.password=1234
#很多人这里都写0
spring.redis.timeout=3000
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=50
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=50
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=5

**为什么不是spring.redis.pool.max-active **
因为新版本的RedisProperties类把Pool放到Redis中了。
有2个可选的连接池,redislettuce,如果用lettuce,那么写为spring.redis.lettuce.pool.max-active

使用RedisTemplate会乱码,因为redis存取的时候会用byte的形式。
解决方法:用StringRedisTemplate,它默认使用utf-8编码。

LoginController代码:

@RestController
@RequestMapping("")
public class LoginController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @RequestMapping("/login")
    public String login(HttpServletRequest request){
        System.out.println(stringRedisTemplate);
        ValueOperations valueOperations = stringRedisTemplate.opsForValue();
        valueOperations.set("shanghai","shanghai"); // 新增
        valueOperations.set("hebei","shijiazhuang2"); // 存在的话就是修改
        stringRedisTemplate.delete("one"); // del
        return "fail";

debug模式启动,浏览器输入: http://localhost:8080/login

spring.redis.timeout=0是什么意思

首先 spring.redis.timeout 是设置连接超时时间的,单位是毫秒。
例如 10 表示10ms。
那么0表示0毫秒就超时么?
当然不是,0表示不设置超时时间,使用的默认值2000ms。

redis.clients.jedis.Connection 类的 connectionTimeout:
private int connectionTimeout = Protocol.DEFAULT_TIMEOUT;
Protocol类的 DEFAULT_TIMEOUT:
public static final int DEFAULT_TIMEOUT = 2000;

如果timeout=0 ,不设置setTimeout,所以直接是默认值。

spring.redis.expire=10是什么意思

这个和timeout一样吗?单位是什么?
不一样,expire设置的过期时间。 单位是??

报错:Could not get a resource from the pool

毫无疑问,链接不上。
看下是host或者密码哪个不对。
有一点需要注意下,yml中的value不能有@等特殊字符,如果有,两端加上单引号可以解决问题。

spring-data-redis官网文档(很不错):
https://docs.spring.io/spring-data/redis/docs/current/reference/html/#redis:requirements

其他redis工具类的引入

<dependency>
	<groupId>com.iqarr.redis</groupId>
	<artifactId>zy-redis-utils</artifactId>
	<version>0.0.2</version>
</dependency>
				
springboot自定义RedisTemplate并使用jedis配置连接池 使用Jedis线程池可以不需要创建新的Jedis对象连接Redis,可以大大减少对于创建和回收Redis连接的开销 @Primary: 当出现相同名字的bean是,优先使用使用了 @Primary 注解的bean 下面开始使用: 1、第一步我们需要导入相应的jar包 <!-- redis--> <dependency> <groupId>o
springboot整合redis实现缓存技术首先我们引入maven依赖在properties中加入redis的密码,地址配置写一个config配置文件然后在你的service接口中在方法上加上@Cacheable注解加完之后好了,进行一次查询之后redis中会出现key值打断点,第一次执行会进行查询,第二次执行不会进入进入断点,说明缓存成功. 首先我们引入maven依赖 &amp;amp;lt;dependen...
创建spring-boot项目,创建的时候同时勾选web,如果不知道怎么创建springboot项目可以参考 https://blog.csdn.net/forezp/article/details/70341651。 1、pom引入,增加如下内容 <dependency> <groupId>org.springframew...
<groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> <scope>provided... 我们要使用java来操作Redis,那么什么是Jedis呢,它是Redis官方推荐的java连接开发工具,是使用java来操作Redis的中间件。 使用Jedis十分简单 创建一个Maven项目 添加Jedis的Jar包 <!-- https://mvnrepository.com/artifact/redis.client.
一、不同版本RedisProperties的区别 1.这是springboot版本为1.3.2RELEASE中的RedisProperties配置文件类,从图片中可以看得出来该本的redis配置文件属性有两个内部静态类分别是Pool和Sentinel,七个属性变量。列入我们想在配置文件中设置redis数据库host地址,则可以这样写 spring.redis.host=localhost...
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、连接配置,在