redis.clients.jedis.exceptions.JedisDataException: ERR Syntax error, try CLIENT (LIST | KILL ip:port

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: redis.clients.jedis.exceptions.JedisDataException: ERR Syntax error, try CLIENT (LIST | KILL ip:port

1.报错分析

这个报错问题主要先看你的application.properties文件当中的配置redis是否正确,我的是这样的,

# Redis服务器配置
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.password=111111(没有设置密码就不要这段就行)
# Redis连接池配置
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.data.redis.timeout=30000

如果你的Redis连接池配置在application.properties文件中应该是正确的。但是,由于您仍然遇到了Redis连接问题,可能还有其他原因导致了这个错误。

2.检查redis是否连接

首先,确保Redis服务器正常运行并且可以从您的应用程序所在的主机访问。您可以使用以下命令来测试Redis服务器是否正常运行。

使用命令:

redis-cli ping

如果Redis服务器没有运行,请确保启动它。

接下来,请检查应用程序代码,特别是与Redis相关的部分,确保没有发送不正确的Redis命令。确保使用的Redis客户端库版本与您的应用程序和Redis服务器兼容。

3.使用Lettuce

如果问题仍然存在,您可以尝试切换到使用Lettuce作为Redis客户端,因为它是Spring Boot 2.x 默认支持的Redis客户端。以下是如何在pom.xml中添加Lettuce依赖的示例:

        <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </dependency>

您可以将Redis连接工厂配置修改为适用于Lettuce的方式:

RedisConfig.java

import java.time.Duration;
/**
 * Redis 配置类
 */
@Configuration
@EnableCaching
public class RedisConfig {
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
        lettuceConnectionFactory.setHostName("127.0.0.1");
        lettuceConnectionFactory.setPort(6379);
        lettuceConnectionFactory.setPassword("111111");
        System.out.println("Redis 连接工厂:" + lettuceConnectionFactory.toString());
        return lettuceConnectionFactory;
    }

将使用Lettuce作为Redis客户端,并且不再依赖于Jedis。在切换到Lettuce后,再次运行您的应用程序,看看是否仍然遇到相同的问题.

完整的RedisConfig配置

package com.tscabinet.config;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.serializer.*;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
/**
 * Redis 配置类
 */
@Configuration
@EnableCaching
public class RedisConfig {
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
        lettuceConnectionFactory.setHostName("127.0.0.1");
        lettuceConnectionFactory.setPort(6379);
        lettuceConnectionFactory.setPassword("111111");
        System.out.println("Redis 连接工厂:" + lettuceConnectionFactory.toString());
        return lettuceConnectionFactory;
    }
    /**
     * 配置缓存管理器
     * @param factory Redis 线程安全连接工厂
     * @return 缓存管理器
     */
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        // 生成两套默认配置,通过 Config 对象即可对缓存进行自定义配置
        RedisCacheConfiguration cacheConfig1 = RedisCacheConfiguration.defaultCacheConfig()
                // 设置过期时间 10 分钟
                .entryTtl(Duration.ofMinutes(10))
                // 设置缓存前缀
                .computePrefixWith(cacheName -> "cache:user:" + cacheName + ":")
                // 禁止缓存 null 值
                .disableCachingNullValues()
                // 设置 key 序列化
                .serializeKeysWith(keyPair())
                // 设置 value 序列化
                .serializeValuesWith(valuePair());
        RedisCacheConfiguration cacheConfig2 = RedisCacheConfiguration.defaultCacheConfig()
                // 设置过期时间 30 秒
                .entryTtl(Duration.ofSeconds(30))
                .computePrefixWith(cacheName -> "cache:admin:" + cacheName + ":")
                .disableCachingNullValues()
                .serializeKeysWith(keyPair())
                .serializeValuesWith(valuePair());
        RedisCacheConfiguration cacheConfig3 = RedisCacheConfiguration.defaultCacheConfig()
                // 设置过期时间 30 秒
                .entryTtl(Duration.ZERO)
                .computePrefixWith(cacheName -> "cache:NoTime:" + cacheName + ":")
                .disableCachingNullValues()
                .serializeKeysWith(keyPair())
                .serializeValuesWith(valuePair());
        // 返回 Redis 缓存管理器
        return RedisCacheManager.builder(factory)
                .withCacheConfiguration("user", cacheConfig1)
                .withCacheConfiguration("admin", cacheConfig2)
                .withCacheConfiguration("NoTime", cacheConfig3)
                .build();
    }
    /**
     * 配置键序列化
     * @return StringRedisSerializer
     */
    private RedisSerializationContext.SerializationPair<String> keyPair() {
        return RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer());
    }
    /**
     * 配置值序列化,使用 GenericJackson2JsonRedisSerializer 替换默认序列化
     * @return GenericJackson2JsonRedisSerializer
     */
    private RedisSerializationContext.SerializationPair<Object> valuePair() {
        return RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer());
    }
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2天前
|
存储 NoSQL Redis
【Redis】利用Redis List实现数据库分页快速查询
【Redis】利用Redis List实现数据库分页快速查询
152 0
|
2天前
|
存储 NoSQL Java
使用 Redis 的 List 数据结构实现分页查询的思路
使用 Redis 的 List 数据结构实现分页查询的思路
|
2天前
|
NoSQL 网络安全 Redis
redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
当使用Python连接Redis遇到&quot;ConnectionError: Error 111&quot;时,可能的原因包括Redis未启动、非默认端口监听、防火墙阻拦、配置错误或Redis模块安装不正确。解决方法包括启动Redis、检查端口与防火墙设置、修正配置文件、确保模块正确安装及测试服务器功能。提供了一个Python连接Redis的示例代码,根据实际情况调整IP和端口,以诊断连接问题。
51 0
|
2天前
|
存储 NoSQL Redis
redis-(error)-MISCONF。Redis。is。configuredto。save。RDBsnapshots
redis-(error)-MISCONF。Redis。is。configuredto。save。RDBsnapshots
208 0
|
2天前
|
NoSQL Java Unix
Redis基础操作 String List
Redis基础操作 String List
10 0
|
2天前
|
存储 NoSQL Redis
Redis入门到通关之Redis数据结构-List篇
Redis入门到通关之Redis数据结构-List篇
33 1
|
2天前
|
消息中间件 缓存 NoSQL
Redis入门到通关之List命令
Redis入门到通关之List命令
16 0
|
2天前
|
NoSQL Redis 索引
[Redis]——Redis命令手册set、list、sortedset
[Redis]——Redis命令手册set、list、sortedset
|
2天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
8 0
|
2天前
|
存储 安全 Java
【JAVA基础篇教学】第八篇:Java中List详解说明
【JAVA基础篇教学】第八篇:Java中List详解说明