账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    python redis做缓存,数据入mysql时redis hset失败
    35
    0

    问题描述

    我在使用python3的redis做缓存是,结构为hset,然当数据达到10000条时,我要对这10000条数据进行入库,此时我删除了redis的hset,这个时候新请求上来的新增不到redis里面,只有在这10000条数据全都入库完毕才会新增到redis里面.

    问题出现的环境背景及自己尝试过哪些方法

    中间加临时变量作为过渡(依然失效,或是我的方式不对)

    相关代码

    rds.hset(chn_idx, uid, data) # 当下面进入if判断之后,只有入mysql完成后才会有效的新增数据.
    ualen = int(rds.hlen(chn_idx))
    if ualen > 10000:
        keyData = rds.hgetall(chn_idx)
        rds.delete(chn_idx)
        for uid, infos in keyData.items():
            ...   # 一系列入mysql操作.

    你期待的结果是什么?实际看到的错误信息又是什么?

    rds.delete(chn_idx) 后新的请求依然可以新增到redis中,这个hset仅起中间缓存的作用,并且保证数据不会丢失.造成现在这种情况的原因是什么?是hset中的数据太大导致delete需要时间?还是其他原因?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 小知之 普通会员 1楼

      Redis 使用哈希表(Hash)数据结构来存储键值对,而HSET(哈希键值对设置)是Redis中用于在键中存储多个值的操作。如果你在使用HSET时遇到失败,可能的原因有很多,以下是一些可能的原因:

      1. 键已经存在:在Redis中,哈希表中的键是唯一的,如果存在另一个键与你设置的键相同,那么你的设置将失败。所以,你需要注意检查你的设置是否与现有键冲突。

      2. 无法将数据保存到MySQL:如果Redis中存在与你设置的键冲突的其他键,那么Redis将无法将数据保存到MySQL中。在这种情况下,你需要先在MySQL中解决冲突。

      3. 缓存过期:Redis中的数据默认是过期的,如果超过一定时间没有使用,那么这些数据就会被自动删除。如果你设置了一个过期时间,但是你的设置还未过期,那么Redis将无法将数据保存到MySQL中。

      4. 数据量过大:如果Redis中的数据量过大,那么可能会导致Redis无法正常工作。在这种情况下,你可以考虑优化你的数据结构,或者考虑使用其他缓存系统。

      5. Redis服务器问题:如果Redis服务器出现故障,那么Redis将无法正常工作。在这种情况下,你需要联系你的服务器提供商,或者尝试重启Redis服务器。

      解决这些问题需要根据具体情况来决定,如果以上方法都无法解决问题,可能需要寻求专业的帮助。

    • じ☆ve瑶═╬ 普通会员 2楼

      Redis 使用哈希表(Hash)数据结构来存储键值对,而HSET(哈希键值对设置)是Redis中用于在键中存储多个值的操作。如果你在使用HSET时遇到失败,可能的原因有很多,以下是一些可能的原因:

      1. 键已经存在:在Redis中,哈希表中的键是唯一的,如果存在另一个键与你设置的键相同,那么你的设置将失败。所以,你需要注意检查你的设置是否与现有键冲突。

      2. 无法将数据保存到MySQL:如果Redis中存在与你设置的键冲突的其他键,那么Redis将无法将数据保存到MySQL中。在这种情况下,你需要先在MySQL中解决冲突。

      3. 缓存过期:Redis中的数据默认是过期的,如果超过一定时间没有使用,那么这些数据就会被自动删除。如果你设置了一个过期时间,但是你的设置还未过期,那么Redis将无法将数据保存到MySQL中。

      4. 数据量过大:如果Redis中的数据量过大,那么可能会导致Redis无法正常工作。在这种情况下,你可以考虑优化你的数据结构,或者考虑使用其他缓存系统。

      5. Redis服务器问题:如果Redis服务器出现故障,那么Redis将无法正常工作。在这种情况下,你需要联系你的服务器提供商,或者尝试重启Redis服务器。

      解决这些问题需要根据具体情况来决定,如果以上方法都无法解决问题,可能需要寻求专业的帮助。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部