当前位置:   article > 正文

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

jedisdataexception: err syntax error

目录

1.报错分析

2.检查redis是否连接

3.使用Lettuce


1.报错分析

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

  1. # Redis服务器配置
  2. spring.data.redis.host=127.0.0.1
  3. spring.data.redis.port=6379
  4. spring.data.redis.password=111111(没有设置密码就不要这段就行)
  5. # Redis连接池配置
  6. spring.redis.pool.max-active=8
  7. spring.redis.pool.max-wait=-1
  8. spring.redis.pool.max-idle=8
  9. spring.redis.pool.min-idle=0
  10. 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依赖的示例:

  1. <dependency>
  2. <groupId>io.lettuce</groupId>
  3. <artifactId>lettuce-core</artifactId>
  4. </dependency>

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

RedisConfig.java

  1. import java.time.Duration;
  2. /**
  3. * Redis 配置类
  4. */
  5. @Configuration
  6. @EnableCaching
  7. public class RedisConfig {
  8. @Bean
  9. public RedisConnectionFactory redisConnectionFactory() {
  10. LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
  11. lettuceConnectionFactory.setHostName("127.0.0.1");
  12. lettuceConnectionFactory.setPort(6379);
  13. lettuceConnectionFactory.setPassword("111111");
  14. System.out.println("Redis 连接工厂:" + lettuceConnectionFactory.toString());
  15. return lettuceConnectionFactory;
  16. }

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

完整的RedisConfig配置

  1. package com.tscabinet.config;
  2. import org.springframework.cache.CacheManager;
  3. import org.springframework.cache.annotation.EnableCaching;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.data.redis.cache.RedisCacheConfiguration;
  7. import org.springframework.data.redis.cache.RedisCacheManager;
  8. import org.springframework.data.redis.connection.RedisConnectionFactory;
  9. import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  10. import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
  11. import org.springframework.data.redis.serializer.*;
  12. import redis.clients.jedis.JedisPoolConfig;
  13. import java.time.Duration;
  14. /**
  15. * Redis 配置类
  16. */
  17. @Configuration
  18. @EnableCaching
  19. public class RedisConfig {
  20. @Bean
  21. public RedisConnectionFactory redisConnectionFactory() {
  22. LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
  23. lettuceConnectionFactory.setHostName("127.0.0.1");
  24. lettuceConnectionFactory.setPort(6379);
  25. lettuceConnectionFactory.setPassword("111111");
  26. System.out.println("Redis 连接工厂:" + lettuceConnectionFactory.toString());
  27. return lettuceConnectionFactory;
  28. }
  29. /**
  30. * 配置缓存管理器
  31. * @param factory Redis 线程安全连接工厂
  32. * @return 缓存管理器
  33. */
  34. @Bean
  35. public CacheManager cacheManager(RedisConnectionFactory factory) {
  36. // 生成两套默认配置,通过 Config 对象即可对缓存进行自定义配置
  37. RedisCacheConfiguration cacheConfig1 = RedisCacheConfiguration.defaultCacheConfig()
  38. // 设置过期时间 10 分钟
  39. .entryTtl(Duration.ofMinutes(10))
  40. // 设置缓存前缀
  41. .computePrefixWith(cacheName -> "cache:user:" + cacheName + ":")
  42. // 禁止缓存 null 值
  43. .disableCachingNullValues()
  44. // 设置 key 序列化
  45. .serializeKeysWith(keyPair())
  46. // 设置 value 序列化
  47. .serializeValuesWith(valuePair());
  48. RedisCacheConfiguration cacheConfig2 = RedisCacheConfiguration.defaultCacheConfig()
  49. // 设置过期时间 30 秒
  50. .entryTtl(Duration.ofSeconds(30))
  51. .computePrefixWith(cacheName -> "cache:admin:" + cacheName + ":")
  52. .disableCachingNullValues()
  53. .serializeKeysWith(keyPair())
  54. .serializeValuesWith(valuePair());
  55. RedisCacheConfiguration cacheConfig3 = RedisCacheConfiguration.defaultCacheConfig()
  56. // 设置过期时间 30 秒
  57. .entryTtl(Duration.ZERO)
  58. .computePrefixWith(cacheName -> "cache:NoTime:" + cacheName + ":")
  59. .disableCachingNullValues()
  60. .serializeKeysWith(keyPair())
  61. .serializeValuesWith(valuePair());
  62. // 返回 Redis 缓存管理器
  63. return RedisCacheManager.builder(factory)
  64. .withCacheConfiguration("user", cacheConfig1)
  65. .withCacheConfiguration("admin", cacheConfig2)
  66. .withCacheConfiguration("NoTime", cacheConfig3)
  67. .build();
  68. }
  69. /**
  70. * 配置键序列化
  71. * @return StringRedisSerializer
  72. */
  73. private RedisSerializationContext.SerializationPair<String> keyPair() {
  74. return RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer());
  75. }
  76. /**
  77. * 配置值序列化,使用 GenericJackson2JsonRedisSerializer 替换默认序列化
  78. * @return GenericJackson2JsonRedisSerializer
  79. */
  80. private RedisSerializationContext.SerializationPair<Object> valuePair() {
  81. return RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer());
  82. }
  83. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/739383
推荐阅读
相关标签
  

闽ICP备14008679号