当我们使用redis作为hangfire的存储时,如果使用了下面红色字体的配置

GlobalConfiguration.Configuration.UseRedisStorage(@"192.168.0.3:7002",

new Hangfire.Redis.RedisStorageOptions

{

Prefix = "{hangfire-A}:",

// Db =2

});

app.UseHangfireDashboard();

则你很有可能会看到下面的错误

Key has MOVED from Endpoint 127.0.0.1:7001 and hashslot 6991 but CommandFlags.NoRedirect was specified - redirect not followed for MGET. IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=1,Free=32766,Min=4,Max=32767), Local-CPU: n/a

在Hangfire的官网,对这种现象有一个说明,但常常被我们忽略掉。具体说明如下

Redis Cluster support¶

You can use a single endpoint to connect to a Redis cluster, Hangfire will detect other instances automatically by querying the node configuration. However, it’s better to pass multiple endpoints in order to mitigate connectivity issues, when some of endpoints aren’t available, e.g. during the failover process.

Since Hangfire requires transactions, and Redis doesn’t support ones that span multiple hash slots, you also need to configure the prefix to assign it to the same hash tag:

GlobalConfiguration.Configuration.UseRedisStorage(
    "localhost:6379,localhost:6380,localhost:6381",
    new RedisStorageOptions { Prefix = "{hangfire-1}:" });

This will bind all the keys to a single Redis instance. To be able to fully utilize your Redis cluster, consider using multiple JobStorage instances and leveraging some load-balancing technique (round-robin is enough for the most cases). To do so, pick different hash tags for different storages and ensure they are using hash slots that live on different masters by using commands CLUSTER NODES and CLUSTER KEYSLOT.

来自 <http://docs.hangfire.io/en/latest/configuration/using-redis.html>

文章中明确说明,这种操作会让hangfire的key被绑定到一个单独的redis实例上。这个实例就是我们需要配置的连接地址(注:这里如果配置集群的地址,一样会出错,只能配置绑定的那个地址)。但怎么找到这个地址呢?

首先,我们使用CLUSTER NODES命令查看每个节点的hash slots分布情况,效果如下:

上图显示了每个节点的分布情况,然后我们需要使用CLUSTER KEYSLOT 命令找出我们需要做为key的值会hash成什么值,然后找到对应值分配 的服务器。 如上“hangfire-A" hash后对应的slor是16173, 对应的是7200端口对应的节点。

所以在代码中,我们配置服务器地址时就要使用这个端口。具体如下:

GlobalConfiguration.Configuration.UseRedisStorage(@"192.168.0.3:7002",

new Hangfire.Redis.RedisStorageOptions

{

Prefix = "{hangfire-A}:",

// Db =2

});

然后我们的服务就可以正常起动了

转载于:https://www.cnblogs.com/lention/p/10116339.html

如何解决hangfire使用redis存储时,如果采用了prefix报“Key has MOVED from Endpoint”的错...相关推荐

  1. Python笔记-解决pyinstaller打包后运行时动态加载模块报错(No module named)

    出现的问题就是:No module named 原因是我代码里面使用了这个 importlib.import_module pyinstaller没有检测到. 百度上没有找到解决办法,在外wang找到 ...

  2. 【已解决】labelme编辑label时,闪退;报错“IndexError: list index out of range”

    当前虚拟环境: python     3.6.13 labelme   5.0.1 pip           21.3.1 1.IndexError: list index out of range ...

  3. yii2设置session时间_关于 Swoft 2.0 版本用 Redis 存储 session 时配置问题

    Swoft 2.0 在 session 配置上和 1.0 还是有一些不同地方,而关于这些在 github 上完全没有任何说明,甚至连文档也没有.经过逐步梳理源代码(其中要理解他的 "注解&q ...

  4. 使用redis存储对象,取对象时的一些常见异常

    自动装配失败报空指针异常 报错: java.lang.NullPointerExceptionat com.example.service.UserServiceImpl.sendMsg(UserSe ...

  5. Redis存储总是心里没底?你大概漏了这些数据结构原理

    上一篇文章<Redis存储总用String?你大概错过了更优的使用方法>我们了解了Redis的数据类型特点与适用场景,本期内容则会着重讲讲Redis内存数据结构与编码,弄清Redis内部到 ...

  6. 大容量类 Redis 存储的场景补充-pika

    2019独角兽企业重金招聘Python工程师标准>>> 导读 我们在<大容量类 Redis 存储 - 有关 pika 的一切>里介绍过pika的诞生.pika的特点.pi ...

  7. redis主从复制如何保证数据一致性_面试官:Redis 主从复制时网络开小差了怎么整?...

    上周因为实在太忙就认认真真写了一篇水文,吹了一下自己过去的经历,反响竟然超出了我的预期,并且后台还有读者留言表示想看续集的.哈哈,果然大家还是对水文更有热情. 这期我们继续回到之前的 Redis 话题 ...

  8. redis 存储数据不设置过期时间 会自动过期吗_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  9. 【工程应用】用Redis存储特征

    一.Redis应用背景 在工程应用中,类似 Embedding 这样的特征是在离线环境下生成的,而推荐或各种服务器是在线上环境中运行的,那这些离线的特征数据是如何导入到线上让推荐服务器使用的呢? Ne ...

  10. ssh,ssm整合redis存储验证码

    ssh整合redis存储验证码 SSM整合redis存储验证码 思路 **获取验证码部分:** **登录部分** 细节 详细代码 前端 后端 SSH 思路: 测试redis是否连接成功 详细代码 后端 ...

最新文章

  1. 华为atn980传输设备_注册开发者超200万!华为HMS加速全球布局,打造全场景智慧体验...
  2. 软件开发和产品经理到底是怎么回事
  3. python 命令-新手向——用python编写命令行应用的简洁方式
  4. 有关OVM社区产品经理对OVM的29个问题解答!
  5. IPv6推进将非常漫长
  6. OAF_VO系列1 - Accelerator Keys
  7. 坐拥270亿参数!阿里达摩院发布超大规模语言模型PLUG,上能写诗词歌赋、下能对答如流...
  8. Android Studio 完美解决 “Android SDK Manager 无法更新“、 ”connection error” 的问题...
  9. 【JZOJ5911】Travel
  10. 关于jquery mobile 页面闪烁与抖动问题
  11. java线程知识点拾遗(1)
  12. OpenCV-图像处理(08、模糊图像一)
  13. vfp 生成html,[转载]vfp 做 b/s 的方法
  14. 微信小程序登陆注册界面前后端完整代码展示
  15. Win10 设置系统还原点
  16. 【2016北京集训】网络战争
  17. python求逆矩阵的方法,Python 如何求矩阵的逆
  18. OpenMW版本,Zotac蒸汽机评论以及更多开放式游戏新闻
  19. Python中随机梯度下降法
  20. android自定义3d饼图,Android使用j4lChartAndroid插件绘制3D饼图

热门文章

  1. 发布一个太空大战小游戏
  2. 摘自一博主的牛逼面试总结 !!! 五颗星(阿里(分享面试过程))
  3. 推荐 :数据可视化的方法、工具和应用
  4. oracle_j000,DBA手记:System State转储之ROW CACHE对象
  5. autoit3转换php,AutoIt3调用动态链接库DLL
  6. html mp4断点播放,html5解决大文件断点续传
  7. FATAL: kernel too old
  8. 读书笔记—趁年轻,折腾吧
  9. bzoj 2429 聪明的猴子
  10. 学妹问我: 如何提高编程能力