redis批量插入

文章目录

    • Redis 批量插入数据
      • 逐条插入
      • 批量插入

Redis 批量插入数据

业务需要,每天要向redis插入千万级别的数据,格式为zset,但是插入数据时发现速度极慢,约为200~300条数据/每秒, 这可就不能接受了,这么算下去插入6千万数据得两年。。。官方给出的是写入速度可以达到10w每秒,这相差的可不是一点两点,虽然插入的是zset,怎么滴速度也不能跟官方差这么大吧,我用本机环境测试,发现速度可以到5000-10000条/每秒,这个大概勉强能接受了,看了下服务器设置,内存占用正常,持久化方式也没啥问题,大概瓶颈是网络?使用pipeline批量插入数据试试看, 设置为每1000条提交一次,避免网络影响,果然,速度达到20000附近了,一个小时内数据就可以插入完成,算是可以接受了

逐条插入

import redis

rds = redis.Redis(...)
expire = 24 * 60 * 60 

# 单条插入
key_values = {......}
for key, value in key_values.items():
    # assert isinstance(value, dict), "value must be dict"
    rds.zadd(key, value)
    rds.expire(key, expire)

批量插入

# 批量插入
_count = 0
bulk_num = 1000   # 设置批量大小,这里设置为1000, 可以根据需要适当增减
key_values = {......}

with rds.pipeline(transaction=False) as pipe:
    for key, value in key_values.items():
        _count += 1
        # assert isinstance(value, dict), "value must be dict"
        pipe.zadd(key, value)
        pipe.expire(key, expire)
        if _count % bulk_num == 0:
            pipe.execute()
            _count = 0
    if _count:
        pipe.execute()

你可能感兴趣的:(数据库,Redis)