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. 以…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...
react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
break 语句和 continue 语句
break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行 break break语句用于跳出代码块或循环 1 2 3 4 5 6 for (var i 0; i < 5; i) { if (i 3){ break; } console.log(i); } continue continue语句用于立即终…...
