python生产redis大量测试数据-百万级

背景

主要是为了测试用python进行redis数据迁移

如下
Python3操作redis百万级数据迁移,单机到单机,集群到集群

使用pipeline提交数据,50万各种数据类型键值对,大概7s生成

脚本

内容如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 2024/4/24

import random
import string
import redis
from rediscluster import RedisCluster
from datetime import datetime
import time


def generate_random_string(length):
    letters_and_digits = string.ascii_letters + string.digits
    random_string = ''.join((random.choice(letters_and_digits) for i in range(length)))
    return random_string


def redis_pipe_write(redis_client, count, batch_size=100):
    """
    使用pipeline写入测试数据,循环batch_size,提交一次数据
    :param redis_client: redis实例
    :param count: 循环次数
    :param batch_size: 每次pipeline队列数,不要太大
    :return:
    """

    # 危险操作,清空数据库
    # redis_client.flushdb()

    with redis_client.pipeline() as pipe:
        for i in range(count):
            # 创建不同类型的键值对

            ramdom_10 = generate_random_string(10)
            ramdom_20 = generate_random_string(20)
            ramdom_30 = generate_random_string(30)
            ramdom_35 = generate_random_string(35)
            ramdom_40 = generate_random_string(40)
            ramdom_50 = generate_random_string(50)

            # 字符串类型
            string_key = "test2_string_{}".format(i)
            string_value = ramdom_50
            pipe.set(string_key, string_value)

            # 列表类型
            list_key = "Test2_list_{}".format(i)
            list_value1 = ramdom_10
            list_value2 = ramdom_20
            pipe.rpush(list_key, list_value1, list_value2)

            # 集合类型
            set_key = "Test2_set_{}".format(i)
            set_value1 = ramdom_20
            set_value2 = ramdom_30
            pipe.sadd(set_key, set_value1, set_value2)

            # 有序集合类型
            zset_key = "Test2_zset_{}".format(i)
            zset_value1 = ramdom_20
            zset_value2 = ramdom_30
            pipe.zadd(zset_key, {zset_value1: 1, zset_value2: 2})

            # 哈希类型
            hash_key = "Test2_hash_{}".format(i)
            hash_field1 = ramdom_35
            hash_value1 = ramdom_40
            pipe.hset(hash_key, hash_field1, hash_value1)

            # print(f"redis 第{i}次测试数据提交完毕!")

            # 如果数据量较大
            if count >= batch_size:
                if i % batch_size == 0:
                    print(f"redis 第{i}次测试数据提交完毕!")
                    pipe.execute()
                    pipe.reset()

        # 如果不是整除,最后提交一次
        print(f"redis 第{i}次测试数据提交完毕!")
        pipe.execute()
        pipe.reset()

    print(f"redis测试数据写入完毕!")


# redis单节点
pool = redis.ConnectionPool(
    host='192.168.10.2',
    port=6369,
    db=0,
    password='',
    encoding='utf-8',
    decode_responses=True,
    socket_timeout=10,
    max_connections=100
)
r = redis.Redis(connection_pool=pool)

# # Redis集群
# source_node_list = [
#     {"host": "192.168.11.1", "port": "6379"},
#     {"host": "192.168.11.2", "port": "6379"},
#     {"host": "192.168.11.3", "port": "6379"},
#     {"host": "192.168.11.4", "port": "6379"},
#     {"host": "192.168.11.5", "port": "6379"},
#     {"host": "192.168.11.6", "port": "6379"},
# ]
# # 创建RedisCluster的实例
# # decode_responses设置为True会自动将响应数据解码为utf-8编码的字符串
# redis_cluster_source = RedisCluster(
#     startup_nodes=source_node_list,
#     decode_responses=True,
#     password='',
#     max_connections=100
# )


if __name__ == '__main__':
    start_time = time.perf_counter()

    # 单节点,用连接池
    # 下面的1000代表5个数据类型,每个1000键值对,batch_size代表循环100次提交一次pipeline
    # 最终会生成1000*5 = 5000个各类型的键值对测试数据,根据实际情况修改参数
    redis_pipe_write(r, 1000, batch_size=100)

    # 集群
    # redis_pipe_write(redis_cluster_source, 105301, batch_size=3000)

    print("结束时间:", datetime.now())
    end_time = time.perf_counter()

    # 计算执行时间
    execution_time = end_time - start_time
    print(f"代码执行时间: {execution_time} 秒")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/570023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

毫米波雷达模块用于海洋生态环境监测的技术方案研究

海洋生态环境是地球上重要的自然资源之一,对其进行监测和保护具有重要意义。毫米波雷达技术作为一种先进的感知技术,在海洋生态环境监测中具有广阔的应用前景。本文将探讨毫米波雷达模块用于海洋生态环境监测的技术方案,包括其原理、应用场景…

el-select下拉框远程搜索且多选时,编辑需要回显的一个简单案例

前端业务开发中不管使用vue2~3,还是react,angular各种前端技术栈,经常会遇到这种业务。一个下拉框Select中,不仅需要需要支持远程模糊搜索,还需要支持多选。并且在编辑时,还能正常把已经多选好的内容回显到…

redis主从复制,无法从redis读取最新的数据

目录 一、场景二、redis连接配置三、排查四、原因五、解决 一、场景 1、redis为主从复制模式 2、采用读写分离(主节点写入,从节点读取) 3、最新数据成功写入主节点,但从节点没有同步最新的数据 二、redis连接配置 #主节点 spr…

Linux——进程基本概念下篇

Linux——进程基本概念下篇 文章目录 Linux——进程基本概念下篇一、环境变量1.1 环境变量的定义1.2 环境变量的相关命令1.3 命令行参数1.4 本地变量和环境变量1.5 常规命令和内建命令 二、进程地址空间2.1 地址空间的概念2.2 页表和MMU2.3 地址空间的作用2.4 地址空间的好处 一…

Docker容器:docker基础

目录 一.docker前言 云计算服务模式 关于 docker 产品 虚拟化产品有哪些? ① 寄居架构 ② 源生架构 虚拟化技术概述 主流虚拟化产品对比 1. VMware系列 2. KVM/OpenStack 3. Xen 4. 其他半/全虚拟化产品 二. docker 的相关知识 1. docker 的概念 doc…

【古琴】倪诗韵古琴雷修系列(形制挺多的)

雷音系列雷修:“修”字取意善、美好的,更有“使之完美”之意。精品桐木或普通杉木制,栗壳色,纯鹿角霜生漆工艺。 方形龙池凤沼。红木配件,龙池上方有“倪诗韵”亲笔签名,凤沼下方,雁足上方居中位…

码头船只出行及配套货柜码放管理系统-毕设

毕业设计说明书 码头船只出行及配套货柜码放 管理系统 码头船只出行及配套货柜码放管理系统 摘要 伴随着全球化的发展,码头的物流和客运增多,码头业务迎来新的高峰。然而码头业务的增加,导致了人员成本和工作量的增多。为了解决这一基本问题&…

Bentley二次开发教程24-交互式类工具

交互式工具概念简述 本次内容主要涉及到交互式工具的使用,在MicroStation中,超过一半的功能都是以交互式工具的形式而存在的,因此交互式工具在MicroStation二次开发中便显得非常重要。当我们的鼠标或键盘在视图中产生交互操作时,…

各平台奇怪问题备忘录

微信小程序 小程序报错Page 页面路径 has not been register yet 描述:uniapp做微信小程序开发时,新增某页面后,小程序跳转该页面报错Page 页面路径 has not been register yet 已知:page.json已添加该页面,小程序a…

【Linux】文件目录及路径表示

1. Linux目录结构 在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。 /etc: 这个是系统中的配置文件,如果更改了该目录下的某个文件可能会导致系统不能启动。 /bin, /sbin, /usr/bin, /usr…

vue快速入门(四十一)组件通信-依赖注入

注释很详细&#xff0c;直接上代码 上一篇 新增内容 祖先组件向下传值子代组件接受数据 源码 App.vue <template><div id"app"><sonComponent></sonComponent></div> </template> <script> import sonComponent from &qu…

python绘制随机地形地图

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 当我们谈论计算机编程中的地图生成时&#xff0c;通常会想到游戏开发、仿真模拟或者数据可视…

vue3 修改路由中的meta属性

有些时候可能需要在路由跳转前后修改meta里面的相关属性值&#xff0c;这个时候就需要使用钩子函数&#xff08;路由守卫&#xff09;&#xff0c;钩子函数有全局钩子&#xff0c;局部组件钩子函数以及路由配置里面的钩子函数 &#xff08;这些也叫路由守卫&#xff09; 1.全局…

python数字验证码自动识别

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在网络上&#xff0c;许多网站和应用程序使用验证码&#xff08;Completely Automated Publ…

Ubuntu系统开机长

Ubuntu系统开机长 1. 检查开机自启动软件的所占时间2. 将耗时最高的禁止开机自启动 1. 检查开机自启动软件的所占时间 systemd-analyze blame2. 将耗时最高的禁止开机自启动 sudo systemctl disable networking.service这个耗时是有阈值的&#xff0c;一般大于15s的算&#x…

【数据结构与算法】8.二叉树的基本概念|前序遍历|中序遍历|后序遍历

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

vue封装请求、合并js、合并多个js

vue封装请求、合并js、合并多个js 作为一个后端开发&#xff0c;写前端时发现&#xff0c;每次导入api接口都会有一堆代码&#xff0c;像下面这样&#xff1a; import {footprintList, footprintDelete} from /api/userApi.js import {addressList} from /api/userApi.js impor…

设置Linux开发板开机自启动QT程序的报错解决办法

设置Linux开发板开机自启动QT程序报错解决办法 设置开发板开机自启动QT 打开 /etc/init.d/rsC 文件&#xff0c;添加以下内容 cd / ./my_start_run.shmy_start_run.sh 是自己编写的自启动脚本&#xff0c;内容例如下&#xff1a;(也可以将这些直接写到 /etc/init.d/rsC 文件…

【算法刷题 | 贪心算法02】4.24(摆动序列)

文章目录 3.摆动序列3.1题目3.2解法&#xff1a;贪心3.2.1贪心思路3.2.2代码实现 3.摆动序列 3.1题目 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。 第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素…

嵌入式总线协议基础教学

在嵌入式系统设计中&#xff0c;总线协议&#xff08;bus protocols&#xff09;扮演着至关重要的角色&#xff0c;它们定义了设备如何在共享通信路径上交换数据。 本文将介绍两种常见的嵌入式总线协议&#xff1a;IC&#xff08;Inter-Integrated Circuit&#xff09;和SPI&a…