Python脚本之操作Redis Cluster【二】
本文为博主原创,未经授权,严禁转载及使用。
本文链接:https://blog.csdn.net/zyooooxie/article/details/112484045
之前写过一篇 使用redis-py来操作redis集群, https://blog.csdn.net/zyooooxie/article/details/123760358 ,这期来分享下 使用redis-py-cluster;
【实际这篇博客推迟发布N个月】
个人博客:https://blog.csdn.net/zyooooxie
【以下所有内容仅为个人项目经历,如有不同,纯属正常】
redis-py-cluster
https://pypi.org/project/redis-py-cluster/
This major version of redis-py-cluster supports redis-py >=3.0.0, <4.0.0.
代码
"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: zyooooxie@gmail.com
"""import tracebackfrom rediscluster import ClusterConnectionPool
from rediscluster import RedisClusterfrom xxx_test.user_log import Loghost2 = ''
p1wd = ''
port = 1234
gl_key_name = 'TEST_xie*'Log.info('------')gl_real_string = ''
gl_real_hash = ''
gl_real_list = ''
gl_real_set = ''
gl_no_exist = 'TEST_zyooooxie'gl_test_str = 'test_str'
gl_test_hash = 'test_hash'
gl_test_list = 'test_list'
gl_test_set = 'test_set'Log.info('------')# pip install redis-py-cluster==2.1.3
# https://redis-py-cluster.readthedocs.io/en/2.1.3/index.htmldef redis_py_cluster_connect_1():rc = RedisCluster(startup_nodes=[{'host': host2, 'port': port}],decode_responses=True, password=pwd)Log.info('{}'.format(rc))Log.info(type(rc))Log.error('已连接')return rcdef redis_py_cluster_connect_2():ccp = ClusterConnectionPool(startup_nodes=[{'host': host2, 'port': port}],decode_responses=True, password=pwd)rc = RedisCluster(connection_pool=ccp)Log.info('{}'.format(rc))Log.info(type(rc))Log.error('已连接')return rcdef redis_py_cluster_connect_3():rc = RedisCluster(host=host2, port=port,decode_responses=True, password=pwd)Log.info('{}'.format(rc))Log.info(type(rc))Log.error('已连接')return rc
"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: zyooooxie@gmail.com
"""def cluster_commands(rc: RedisCluster):Log.info(rc.cluster_info())Log.info(rc.cluster_slots())Log.info(rc.cluster_nodes())Log.info('------')exist_key_slot = rc.cluster_keyslot(gl_real_string) # 计算key 应该被放置在哪个slotLog.info(exist_key_slot)Log.info(rc.cluster_countkeysinslot(exist_key_slot)) # 返回 slot 目前包含的键值对数量Log.info(rc.cluster_get_keys_in_slot(exist_key_slot, 0)) # 返回 n 个 slot的键Log.info(rc.cluster_get_keys_in_slot(exist_key_slot, 1))Log.info(rc.cluster_get_keys_in_slot(exist_key_slot, 2))Log.info(rc.cluster_get_keys_in_slot(exist_key_slot, 3))Log.info('------')Log.info(rc.cluster_keyslot(gl_real_hash))Log.info(rc.cluster_keyslot(gl_real_list))Log.info(rc.cluster_keyslot(gl_real_set))Log.info(rc.cluster_keyslot(gl_no_exist))
"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: zyooooxie@gmail.com
"""def keys_commands(rc: RedisCluster):data_list = rc.keys(gl_key_name)Log.info(len(data_list))Log.info(type(data_list))Log.error('------')def scan_commands(rc: RedisCluster):data_list = list()cursor = 0# args = rc.scan(cursor, gl_key_name, count=5000)# Log.info(args) # 返回值有问题# https://redis-py-cluster.readthedocs.io/en/2.1.3/commands.html#keys-generic# SCAN command has currently a buggy client side implementation.## It is not recommended to use any *SCAN methods.# 不建议使用任何*SCAN方法。Log.error('------')def scan_iter_method(rc: RedisCluster):args = rc.scan_iter(gl_key_name, count=5000)Log.info(args)Log.info(type(args))data = list(args)Log.info(len(data))Log.info(data[-10:])
"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: zyooooxie@gmail.com
"""def cluster_str(rc: RedisCluster):""":param rc::return:"""# https://redis.io/docs/data-types/strings/Log.info(rc.delete(gl_test_str))Log.info(rc.set(gl_test_str, 'https://blog.csdn.net/zyooooxie', ex=1000))Log.info(rc.get(gl_test_str))key1 = 'external:customer:xxx_1'key2 = 'external:customer:xxx_2'key3 = 'external:customer:xxx_3'key4 = 'external:TEST'Log.info(rc.mset({key1: 'value 1', key2: 'value 2', key3: '3个确定都是相同slot',key4: 'redis-py-cluster的mget、mset 支持 不同slot的key'}))Log.info(rc.mget(key1, key3, key2))Log.info(rc.mget(key1, key4))Log.info('------')Log.info('redis-py-cluster的unlink 必须是 the same slot的key')Log.info(rc.unlink(key1, key3))# Log.info(rc.unlink(key1, key4, gl_no_exist)) # Keys in request don't hash to the same slotLog.info(rc.exists(gl_test_str))Log.info(rc.type(gl_test_str))Log.info(rc.ttl(gl_test_str))Log.info(rc.expire(gl_test_str, 2 * 60 * 60))def cluster_hash(rc: RedisCluster):""":param rc::return:"""# https://redis.io/docs/data-types/hashes/Log.info(rc.delete(gl_test_hash))Log.info(rc.hset(gl_test_hash, mapping={'hash_key0': 'hash_value0', 'hash_key1': 'hash_value1','hash_key2': 'hash_value2', 'hash_key3': 'hash_value3','hk4': 'hv4', 'hk5': 'hv5','hk6': 'hv6'}))Log.info(rc.hget(gl_test_hash, 'hash_key0'))Log.info(rc.hlen(gl_test_hash))Log.info(rc.hexists(gl_test_hash, 'hash_key2222'))Log.info(rc.hkeys(gl_test_hash))Log.info(rc.hvals(gl_test_hash))Log.info(rc.hdel(gl_test_hash, 'hash_key2222', 'hash_key0', 'hk6'))Log.info(rc.hmget(gl_test_hash, 'hash_key2222', 'hash_key2'))Log.info(rc.hmget(gl_test_hash, ['hash_key2222', 'hash_key2']))Log.info(rc.hmset(gl_test_hash, {'test': 'test_value', 'test2': 'test_value2'}))Log.info(rc.hgetall(gl_test_hash))Log.info('------')Log.info(rc.hset(gl_no_exist, mapping={'test': 'test_value', 'test2': 'test_value2'}))Log.info(rc.unlink(gl_no_exist))Log.info(rc.exists(gl_test_hash))Log.info(rc.type(gl_test_hash))Log.info(rc.ttl(gl_test_hash))Log.info(rc.expire(gl_test_hash, 2 * 60 * 60))def cluster_list(rc: RedisCluster):""":param rc::return:"""# https://redis.io/docs/data-types/lists/Log.info(rc.delete(gl_test_list))Log.info(rc.rpush(gl_test_list, 'list1', 'list2', 'list3'))Log.info(rc.lindex(gl_test_list, 1))Log.info(rc.llen(gl_test_list))Log.info(rc.lpush(gl_test_list, 'list0', 'list0'))Log.info(rc.linsert(gl_test_list, 'BEFORE', 'list0', 'BEFORE__'))Log.info(rc.linsert(gl_test_list, 'AFTER', 'list0', 'AFTER__')) # 放在第一个list0 之后Log.info(rc.lrange(gl_test_list, 0, -1))Log.info(rc.lpop(gl_test_list))Log.info(rc.rpop(gl_test_list))Log.info(rc.lrem(gl_test_list, 1, 'list0'))Log.info(rc.lset(gl_test_list, 0, '新的_0'))Log.info('------')Log.info(rc.lpush(gl_no_exist, 0, 'list_0', 1, 'list_1'))Log.info(rc.unlink(gl_no_exist))Log.info(rc.type(gl_test_list))Log.info(rc.exists(gl_test_list))Log.info(rc.ttl(gl_test_list))Log.info(rc.expire(gl_test_list, 2 * 60 * 60))def cluster_set(rc: RedisCluster):""":param rc::return:"""# https://redis.io/docs/data-types/sets/Log.info(rc.delete(gl_test_set))Log.info(rc.sadd(gl_test_set, 'set1', 'set2', 'set3', 'set3', 'set3', 'set3', 'set4'))Log.info(rc.sismember(gl_test_set, 'set1111'))Log.info(rc.srem(gl_test_set, 'set1'))Log.info(rc.scard(gl_test_set))Log.info(rc.smembers(gl_test_set))Log.info('------')Log.info(rc.sadd(gl_no_exist, 'set3', 'set3', 'set3', 'set3'))Log.info(rc.unlink(gl_no_exist))Log.info(rc.type(gl_test_set))Log.info(rc.exists(gl_test_set))Log.info(rc.ttl(gl_test_set))Log.info(rc.expire(gl_test_set, 2 * 60 * 60))if __name__ == '__main__':Log.error('------')# rc_m = redis_py_cluster_connect_1()rc_m = redis_py_cluster_connect_2()# rc_m = redis_py_cluster_connect_3()# cluster_commands(rc=rc_m)try:# cluster_str(rc_m)# cluster_hash(rc_m)# cluster_list(rc_m)# cluster_set(rc_m)Log.error(gl_key_name)scan_commands(rc_m)keys_commands(rc_m)# scan_iter_method(rc_m)except Exception as e:Log.error(e.args)Log.info(traceback.format_exc())rc_m.close()Log.error('------')
本文链接:https://blog.csdn.net/zyooooxie/article/details/112484045
个人博客 https://blog.csdn.net/zyooooxie
相关文章:
Python脚本之操作Redis Cluster【二】
本文为博主原创,未经授权,严禁转载及使用。 本文链接:https://blog.csdn.net/zyooooxie/article/details/112484045 之前写过一篇 使用redis-py来操作redis集群, https://blog.csdn.net/zyooooxie/article/details/123760358 &am…...
认识数学建模
文章目录 1 什么是数学建模2 数学建模的比赛形式3 参加数学建模的好处4 数学建模的流程5 数学建模成员分工6 数学建模常用软件7 数学建模竞赛7.1 美国大学生数学建模竞赛7.2 MathorCup高校数学建模挑战赛7.3 华中杯大学生数学建模挑战赛7.4 认证杯数学建模网络挑战赛7.5 华东杯…...
计算机工作原理解析和解剖(基础版)
我们会从软件⼯程师的⻆度解释计算机是如何⼯作的,我们的主要⽬标既不是期待 ⼤家可以造出⾃⼰的计算机,也不是介绍如何编程,⽽是希望让⼤家了解计算机的核⼼⼯作机制后,打破计算机的神秘感,并且有利于理解我们平时编程…...
外网ssh远程连接服务器
文章目录 外网ssh远程连接服务器一、前言二、配置流程1. 在服务器上安装[cpolar](https://www.cpolar.com/)客户端2. 查看版本号,有正常显示版本号即为安装成功3. token认证4. 简单穿透测试5. 向系统添加服务6. 启动cpolar服务7. 查看服务状态8. 登录后台࿰…...
滴滴基于 Ray 的 XGBoost 大规模分布式训练实践
背景介绍 作为机器学习模型的核心代表,XGBoost 在滴滴众多策略算法业务场景中发挥着至关重要的作用。因此,保障并持续提升 XGBoost 模型的离线训练及在线推理稳定性一直是机器学习平台的重点工作。同时,面对多样化的业务场景定制需求和数据规…...
k8s从入门到实践
k8s从入门到实践 介绍 Kubernetes(简称k8s)和Docker Swarm是两个流行的容器编排工具,它们都可以帮助用户管理和部署分布式应用,尤其是基于容器的应用。以下是两者的主要特点和对比: Kubernetes (k8s): 开…...
Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件
一、参考资料 stackoverflow qt - How to generate .sln/.vcproj using qmake - Stack Overflowhttps://stackoverflow.com/questions/2339832/how-to-generate-sln-vcproj-using-qmake?answertabtrending#tab-topqt - 如何使用 qmake 生成 .sln/.vcproj - IT工具网 (coder.wo…...
金蝶云星空 ServiceGateway RCE漏洞复现
0x01 产品简介 金蝶云星空是一款云端企业资源管理(ERP)软件,为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织,多利润中心的大中型企业,以 “开放、标准、社交”三大特性为数字经济时代的企业提供开放的 ERP 云平台。服务涵盖:财…...
二叉树的最大深度[简单]
优质博文:IT-BLOG-CN 一、题目 给定一个二叉树root,返回其最大深度。 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2:…...
[Redis]不同系统间安装redis服务器
日常服务器端开发,消息队列等需求,免不了用到redis,搭建一个redis服务器,方便开发和测试,我们从以下三类系统来说明下: 安装 Redis 服务器的过程因操作系统而异。以下是在常见的 Linux 发行版(…...
Unity之动画和角色控制
目录 📕 一、动画 1.创建最简单的动画 2.动画控制器 📕二、把动画和角色控制相结合 📕三、实现实例 3.1 鼠标控制角色视角旋转 3.2 拖尾效果 📕四、混合动画 最近学到动画了,顺便把之前创建的地形࿰…...
C语言库函数实现字符串转大小写
目录 引言 代码 引言 处理字符串时,除了将字符串中的所有大写字母转换为小写字母外,我们还可以利用其他相关函数进行更丰富的文本操作。本文将以一段使用isupper()、tolower()函数实现字符串全转小写的C语言程序为例,详细介绍这两个函数以及…...
hcip----ospf
一:动态路由协议 IGP 协议---RIP OSPF ISIS EIGRP EGP--EGP ---BGP 三个角度的评判一款动态路由协议的优劣 RIP --request response 1.选路--选路依据不好,可能出现环路 2.收敛速度--计时器 3.占用资源-- RIPV1 RIPV2 RIPNG--ipv6 OSPFV1 OSPFV…...
vue中如何写过滤器
全局注册 (可以在main.js中进行全局注册 vue.fifler(test’,function(v){return v0? ‘终止’:v1?进行中:异常 })在组件页面使用 <view>{{state|test}}</view> <script> export default {data(){return {state: 1// state 1 进行中…...
c语言-文件的读写操作(下)
文章目录 前言一、文件的随机读写1.1 fseek()1.2 ftell()1.3 rewind() 总结 前言 本篇文章介绍c语言中文件的随机读写 一、文件的随机读写 1.1 fseek() fseek()函数的作用是根据文件指针的位置和偏移量定位文件指针 int fseek ( FILE * stream, long int offset, int origi…...
android学习笔记----SQLite数据库
用SQLite语句执行: 首先看到界面: 代码如下: MainActivity.java import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditTe…...
开发知识点-Flutter移动应用开发
支持 安卓 IOS Android 鸿蒙 第一章dart基础章节介绍 移动电商——Flutter-广告Banner组件制作 移动电商——Flutter实战课程介绍 Flutter实例——路由跳转的动画效果...
视频尺寸魔方:分层遮掩3D扩散模型在视频尺寸延展的应用
▐ 摘要 视频延展(Video Outpainting)是对视频的边界进行扩展的任务。与图像延展不同,视频延展需要考虑到填充区域的时序一致性,这使得问题更具挑战性。在本文中,我们介绍了一个新颖的基于扩散模型的视频尺寸延展方法——分层遮掩3D扩散模型(…...
openssl3.2/test/certs - 061 - other@good.org not permitted by CA1
文章目录 openssl3.2/test/certs - 061 - othergood.org not permitted by CA1概述笔记END openssl3.2/test/certs - 061 - othergood.org not permitted by CA1 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\study\openSS…...
如何实现无公网ip远程访问本地websocket服务端【内网穿透】
文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
