Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR invalid ...

本文详细解析了在使用Redis进行GEO地理位置操作时遇到的异常情况,具体为经纬度值超出有效范围导致的错误,并提供了正确的经纬度范围及修正后的代码实现。
io.lettuce.core.RedisCommandExecutionException: ERR invalid longitude,latitude pair 111.110000,111.230000
    at io.lettuce.core.ExceptionFactory.createExecutionException(ExceptionFactory.java:135) ~[lettuce-core-5.1.8.RELEASE.jar:na]
    at io.lettuce.core.ExceptionFactory.createExecutionException(ExceptionFactory.java:108) ~[lettuce-core-5.1.8.RELEASE.jar:na]
    at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) ~[lettuce-core-5.1.8.RELEASE.jar:na]
    at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) ~[lettuce-core-5.1.8.RELEASE.jar:na]
    at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:646) ~[lettuce-core-5.1.8.RELEASE.jar:na]
    at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:604) ~[lettuce-core-5.1.8.RELEASE.jar:na]
    at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:556) ~[lettuce-core-5.1.8.RELEASE.jar:na]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-all-4.1.40.Final.jar:4.1.40.Final]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191]

可以看到redis在操作geo的时候,我的数据又出问题了,

看代码:

    @RequestMapping(value = "/s/{id}", method = RequestMethod.GET)
    @ResponseBody
    public void detail22(@PathVariable Long id) {

       /* Cursor scan = redisTemplate.opsForHash().scan("1", ScanOptions.NONE);
        Set<String> keys = redisTemplate.keys("1111");
        for(String key:keys){
            System.out.println(key);
        }*/

        redisTemplate.boundGeoOps("1111").add(new Point(111.11,111.23),"cxy");
        String s = redisTemplate.boundGeoOps("1111").toString();
        System.out.println(s);

    }

“经度最大是180° 最小是0°纬度最大是 90° 最小是0°

那么我这个地方所以出问题了,可以得知问题所在

修改:

    @RequestMapping(value = "/s/{id}", method = RequestMethod.GET)
    @ResponseBody
    public void detail22(@PathVariable Long id) {

       /* Cursor scan = redisTemplate.opsForHash().scan("1", ScanOptions.NONE);
        Set<String> keys = redisTemplate.keys("1111");
        for(String key:keys){
            System.out.println(key);
        }*/

        redisTemplate.boundGeoOps("1111").add(new Point(111.11,11.23),"cxy");
        String s = redisTemplate.boundGeoOps("1111").toString();
        System.out.println(s);

    }

可以得知没有报错了

 

`Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR unknown` 这条错误信息通常出现在使用Lettuce库与Redis服务器通信的过程中。Lettuce是一个用于连接Redis服务器的Java客户端库。 这条错误的具体含义是,Redis服务器返回了一个未知的命令错误(ERR unknown)。这可能是由于尝试向Redis发送了一个它不认识或不支持的命令所导致的。Redis仅支持预先定义的一系列命令,而尝试执行未被定义的自定义命令或语法错误将引发这样的异常。 ### 解决方法: 1. **检查Redis命令**: - 确保您正在使用的Redis命令是在Redis服务器的文档中列出的有效命令。 - 检查命令的语法是否正确,包括所有必要的参数及其顺序。 2. **审查代码**: - 查找生成此错误的调用点,查看是否有拼写错误、额外参数、错误的参数类型等。 - 如果您的代码是动态构建并发送Redis命令的(例如通过解析JSON或其他配置文件获取命令),确保输入的是有效的Redis命令字符串。 3. **日志和调试**: - 使用日志记录详细信息,如命令前后的状态信息,有助于诊断问题所在。 - 可以考虑添加更多的错误处理机制,捕获这类异常,并提供更具体的错误消息。 4. **更新Lettuce版本**: - 确认Lettuce版本兼容性。有时错误可能是由旧版Lettuce不完全理解某些新式Redis协议变化引起的。 - 尝试升级到最新版本的Lettuce,因为较新的版本可能已经修复了相关的兼容性和错误处理问题。 5. **查阅社区资源**: - 若问题仍无法解决,可以查阅Lettuce的官方文档或开发者论坛,看是否有人遇到过类似的问题及解决方案。 - 社区问答平台如Stack Overflow上也可能会有相关的讨论。 ### 相关问题: 1. 当我在使用Lettuce发送Redis命令时遇到了未知命令错误,应该如何排查代码中的问题? 2. 在使用Redis存储系统时,“ERR unknown”错误意味着什么,如何确定这个错误是由客户端还是服务器端产生的? 3. 如果我在尝试执行一个自定义的Redis命令时出现问题,除了直接查找错误描述外,还有哪些步骤可以帮助定位问题的根源?
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值