跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 全量读取速度
未分類
31 12 月 2020

全量读取速度

全量读取速度

資深大佬 : fxrocks 3

有 1 万多个用户,用户名为 key,hash 形式存储,use1:{k1:v1, k2: v2,…kn: vn}, 每天需要 load 一次所有用户,每个用户每次提取大概 10 个字段。

求问
1 。server 本机上用 Python redis 这样读一次大概多久? 10 万呢?
2 。user 列表是否要有必要单独一条 kv 存储?

大佬有話說 (14)

  • 資深大佬 : YouLMAO

    扫库操作, 自动被 dba 的监控脚本拦截了, 不要骚操作

  • 主 資深大佬 : fxrocks

    @YouLMAO 自己搞得,没有 dba :D,那有其他办法吗?我用 Python redis

  • 資深大佬 : YouLMAO

    分段扫描 SCAN 0 COUNT 100 MATCH papapa*

  • 資深大佬 : RedisMasterNode

    只有 1w 个用户,既然没有 dba,考虑到数据量也很小,如果可以接受阻塞其他命令,直接 keys user:*这样的操作即可。从哈希表中 scan 出这么点数据耗时会很低;而且不是可以自己实践测试一下吗,向 redis 里面写 10w 个用户 key 非常快吧

  • 資深大佬 : niubee1

    你先搞清楚为嘛要这样做,从源头分析,万一你的方案从根本上就不对呢

  • 資深大佬 : Ptu2sha

    一万条小 case 啊 redis 很快的
    当然单机 rdb 或从机拉下来处理最好

  • 主 資深大佬 : fxrocks

    @niubee1 因为偷懒不想搞 mysql 之类,搞关系麻烦,redis 都堆在一个 hash 里方便啊 :D, 查询和更新单个用户数据也快。就是每天读一次所有 key 感觉不太爽。

    @RedisMasterNode 嗯,等下试一试。

    @Ptu2sha 单机 rdb 是指复制 rdb 到另外机器然后再读取?。。。

  • 資深大佬 : crclz

    你是准备把 redis 当 mysql 使吗?想想 ACID 有保障吗?
    如果是对 redis 以及缓存了解不深的人,我推荐你只将 redis 用于缓存,严格按照:查数据库时写缓存、数据库更新时 invalidate 缓存、缓存条目自动过期。

    另外,如果想要方便,可以用 mysql json 或者 postgres jsonb,或者 mongo

  • 主 資深大佬 : fxrocks

    @RedisMasterNode

    试了一下读写 10 万条 10 个字段在 15 秒以内,1 万条在 3 秒以内,完全可以接受。反正每天才一次,而且短期不会有 1 万个用户。就这么搞算了。估计放到云上要快些,现在是在树莓派 4 上测试的。

    t0=time.time()
    pool = redis.ConnectionPool(host=’192.168.31.115′, port=6379, db=0,decode_responses=True)
    r = redis.Redis(connection_pool=pool)

    with r.pipeline(transaction=False) as p:
    for n in range(100000):
    k=f”client_{n}”
    v={“k1″:”v1″,”k2″:”v2″,”k3″:”v3″,”k4″:”v4″,”k5″:”v5″,”k6″:”v6″,”k7″:”v7″,”k8″:”v8″,”k9″:”v9″,”k10″:”v10”}
    p.hmset(k,v)
    t1=time.time()
    print(f”set in pip in {t1-t0} secs”)
    p.execute()
    t2=time.time()
    print(f”pipe exec in {t2-t1} secs”)
    print(f”total write in {t2-t0} secs”)

    t0=time.time()
    with r.pipeline(transaction=False) as p:
    for n in range(100000):
    k=f”client_{n}”
    p.hgetall(k)
    t1=time.time()
    print(f”read in pip in {t1-t0} secs”)
    result=p.execute()
    t2=time.time()
    print(f”pipe exec in {t2-t1} secs”)
    print(f”total read in {t2-t0} secs”)
    <ipython-input-71-ba09b5712492>:9: DeprecationWarning: Pipeline.hmset() is deprecated. Use Pipeline.hset() instead.
    p.hmset(k,v)
    set in pip in 0.4727442264556885 secs
    pipe exec in 14.024574041366577 secs
    total write in 14.497318267822266 secs

    read in pip in 0.18680548667907715 secs
    pipe exec in 12.720657110214233 secs
    total read in 12.90746259689331 secs

  • 主 資深大佬 : fxrocks

    @crclz

    感谢提醒。ACID,我的业务比较特殊,大部分读写都在某个固定时间段,几乎每 10 秒就更新,过了业务时间段后,基本就没有操作了,所以 D 问题不大。A 的话,我还不知道事务失败会不会被 python redis 捕获。。。要查看一下。

    另外 mongoDB 就没有这个问题么?

    看来没有人用纯 redis 哈。

  • 資深大佬 : php8

    普通服务器,单条 1kb 以内,redis 读取大概 10 万每秒

  • 資深大佬 : wellsc

    才一万多数据,分分钟搞定

  • 資深大佬 : pkupyx

    单机 redis,至少抗个 1Wqps 吧。
    不过干嘛不存 mysql,缓存开大点甚至整个 user 表都在内存里了。。。

  • 資深大佬 : nooper

    10w 一秒钟

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具