redis搭建主从、redis搭建集群、redis中StrictRedis()、RedisCluster()方法与python交互

news2025/7/9 0:17:59

一、StrictRedis方法

创建对象,指定host、port、db与指定的服务器端口连接,其中默认host为localhost、port为6379、db为0,不同类型调用的实例方法不同,与redis命令一致,方法需要的参数与命令参数一致

from redis import StrictRedis
sr =StrictRedis(host='localhost', port=6379, db=0)
# 简写:sr = StrictRedis()

二、pycharm使用StrictRedis方法对string类型的数据进行增删改查

方法说明

  • set(key,value):存在则修改,不存在则新增,若成功返回True,否则返回false
  • get(key):获取,若存在返回key所对应的value,否则返回None
  • delete(key):删除key及所对应值,若成功返回受影响的键名,否则返回0
  • keys():获取所有键,支持正则表达式
from redis import StrictRedis
if __name__ == '__main__':
    try:   # 连接获取外部资源要使用try
        sr = StrictRedis()  # 创建对象,与redis服务器建立连接

        add = sr.set('name', 'YY')   # 增加name键,值为YY,若添加成功返回true,否则返回false
        print('是否增加成功:', add)  # 输出结果

        get = sr.get('name')  # 获取键为name的值,若存在返回值,否则返回None
        print('name的值为:', get)

        modify = sr.set('name', 'YX')   # 修改name键的值为YX
        print('修改后name的值为:', sr.get('name'))

        print('获取到的键为:', sr.keys())  # 获取所有键,aa为之前命令行添加的

        delete = sr.delete('name')
        delete2 = sr.delete('nam')
        print('删除成功返回%d,删除失败返回%d' % (delete, delete2))

    except Exception as e:
        print(e)

输出:
若redis服务未启动,将输出如下错误
Error 10061 connecting to localhost:6379. 由于目标计算机积极拒绝,无法连接。

启动后输出:
是否增加成功: True
name的值为: b'YY'
修改后name的值为: b'YX'
获取到的键为: [b'aa', b'name']
删除成功返回1,删除失败返回0

三、搭建主从

主从理解 

  • 一个master主可以拥有多个slave从,一个slave又可有多个slave,由此形成多级服务器集群架构
  • master主用来写数据
  • slave从用来读数据
  • 通过主从配置可以实现读写分离,网站读写比例为10:1

3.1主配置

1.使用ifconfig命令查看ip

2.切换至/etc/redis目录下,执行命令sudo vi redis.conf进入文件

3.修改bind绑定的ip

4.按esc退出编辑,进入命令行模式,执行命令:wq保存并退出

3.2 配置从

1.复制redis.conf命名为slave.conf

3.执行命令sudo redis-server slave.conf启动redis服务

2.打开slave.conf并修改slave.conf中的以下内容

1.修改端口:port 6378
2.找到指定位置新增:slaveof 192.168.76.128 6379

4.查看主从关系

执行命令:redis-cli -h 192.168.76.128 info replication

3.3 数据操作

1.执行命令进入master主客户端

redis-cli -h 192.168.76.128 -p 6379

2.执行命令进入slave从客户端 

redis-cli -h 192.168.76.128 -p 6378

四、搭建集群

主从可以一主多从,但若同时访问量过大则不再适用,如大型企业在全国会有很多服务器(华东、华南、华中……)

集群:是一组相互独立的、通过高速网络互联的计算机,其构成了一个组,并以单一系统模式加以管理,一个客户与集群相互作用时,集群像是一个独立的服务器,集群配置是用于提高可用性和可缩放性,当请求到来时先由负载均衡服务器处理,将请求转发到另外一台服务器上

分类

  • 软件层面:只有一台电脑,在该电脑上启动了多个redis服务
  • 硬件层面:有多台实体电脑,每台电脑上都启动了一个redis或多个redis服务

4.1 创建conf文件

在Desktop目录下创建cluster文件夹,并创建7000.conf文件

4.2 在conf文件中添加内容

在7000.conf文件中编辑并添加如下内容

# 端口号
port 7000   
# 访问的ip
bind 192.168.76.128  
# 是否以守护进程(后台)方式运行
daemonize yes   
# pid文件
pidfile 7000.pid   
# 是否使用集群
cluster-enabled yes   
# 集群文件
cluster-config-file 7000_node.conf   
 # 集群的超时时间
cluster-node-timeout 15000  
# 备份相关
appendonly yes

4.3 复制 conf文件

 复制文件7000.conf并分别命名为7001.conf、7002.conf、7003.conf、7004.conf和7005.conf

4.3 修改conf文件 

进入各个复制的文件,分别修改所选值

如7001.conf文件修改如下 

4.4 使用conf配置文件启动redis服务 

切换至cluster目录,运行redis-server加载这6个配置文件

查看进程

4.5 创建集群

若redis为5.0以上版本,可直接跳过该步骤,改用redis-cli创建集群

切换至redis安装目录下的src目录下,执行以下指令将redis-trib.rb拷贝到/usr/local/bin/目录下,redis-trib.r用于创建集群,复制后可在任何目录下调用次命令

sudo cp redis-trib.rb /usr/local/bin/

运行命令创建集群

redis-trib.rb create --replicas 1 192.168.76.128:7000 192.168.76.128:7001 192.168.76.128:7002 192.168.76.128:7003 192.168.76.128:7004 192.168.76.128:7005

可能运行失败,报警告warning:redis-trib.rb is not longer available,直接按提示即可

4.6 改用以下命令创建集群

redis-cli --cluster create 192.168.76.128:7000 192.168.76.128:7001 192.168.76.128:7002 192.168.76.128:7003 192.168.76.128:7004 192.168.76.128:7005 --cluster-replicas 1 

如下,创建的一主一从,三个节点

 至此集群搭建成功

4.6 数据验证

从上图看看出,搭建的master主服务器为7000、7001、7002,slave从服务器为7003、7004、7005

连接7000,-c表示连接到集群

连接命令:redis-cli -h 192.168.76.128 -p 7000 -c

 写入数据,自动跳到了7001,写入成功

说明

  • redis cluster的设计具有去中心化和去中间件的特性,即集群中的每个节点都是平等的关系每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,且连接保持活跃,由此保证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据
  • Redis集群没有用传统的⼀致性哈希来分配数据,而是采用⼀种叫做哈希槽 (hash slot)的方式。redis cluster默认分配了16384个slot,当我们 set⼀个key时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法为:CRC16(key) % 16384。所以我们在测试set和get的时候,直接跳转到了7000端口的节点
  • Redis集群会把数据存在⼀个master节点,然后在这个master和其对应的salve之间进行数据同步。当读取数据时,也根据⼀致性哈希算法到对应的master节点获取数据。只有当⼀个master挂掉之后,才会启动⼀个对应的salve节点,充当master
  • 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的⼀半时,整个集群就无法提供服务了

五、pycharm使用RedisCluster()方法与集群交互实现增删改查

安装redis-py-cluster命令:pip install redis-py-cluster 

from rediscluster import RedisCluster
if __name__ == '__main__':
    try:
        # 构建所有的节点,redis会用CRC16算法将键和值写到某个节点上
        nodes = [
            {'host': '192.168.76.128', 'port': '7000'},
            {'host': '192.168.76.128', 'port': '7001'},
            {'host': '192.168.76.128', 'port': '7002'}
        ]
        src = RedisCluster(startup_nodes=nodes, decode_responses=True)  # 构建RedisCluster对象
        result = src.set('tel', 99999)   # 新增key为tel的值
        print(result)
        tel = src.get('tel')   # 获取key为tel的值
        print(tel)
    except Exception as e:
        print(e)

输出:
True
99999

程序运行前后命令行查看值 

学习导航:http://xqnav.top/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xavier(8):Xavier使用速腾聚创激光雷达运行a-loam算法部分报错与解决方案

文章目录1 速腾聚创激光雷达驱动报错:Project cv_bridge specifies /usr/include/opencv as an include dirProject grid_map_cv specifies /usr/include/opencv as an include dir2 a-loam算法报错: fatal error: opencv/cv.h: 没有那个文件或目录报错&…

无线社工基础

无线社工基础 一些社会工程学密码生成器(百度) Crunch工具 /usr/share/crunch/charset.lstcrunch 最短长度 最长长度 字符集 选项crunch 8 12 -f /usr/share/crunch/charset.lst ualpha -o /root/pass.txt Windows下对附近无线网络进行扫描 WirelessMon…

MySQL事务/事务与数据库底层数据/多点回滚/隔离级别/悲观锁和乐观锁/锁模式和分类/相关锁总结/JDBC事务实现

文章目录MySQL事务概述事务事务与数据库底层数据事务控制语句事务处理基本测试多点回滚相关日志问题redo logundo log隔离级别常见问题事务隔离性隔离级别的范围总结隔离等级读未提交读已提交可重复读串行化并发写问题幻读问题悲观锁和乐观锁锁模式锁分类按加锁方式分类按照算法…

基于贝叶斯推理估计稳态 (ST) 和非稳态 (NS) LPIII 模型分布拟合到峰值放电(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

ShardingSphere笔记(一): 经验和踩坑总结

ShardingSphere笔记(一): 使用经验总结 文章目录ShardingSphere笔记(一): 使用经验总结一、背景框架选择二、ShardingSphere-jdbc 只是一个帮助你路由的框架(踩坑总结)1. 它默认会认…

支持末尾携带标签的多行TextView

项目开发过程中,遇到个UI上的需求,本着不重复造轮子、敏捷开发的原则,于是乎网上找寻了一番,发现还是自己搞吧,搜不到这样的需求,先看下我们的效果。 总结有以下三点需要注意: 末尾vip部分是…

$19服务:DTCStatusMask和statusofDTC bit 定义

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,当ECU产生DTC时,我们只知道有故障发生了,并不清楚该故障什么时候发生,现在是否已经恢复、发生过几次,恢复过几次等信息,基于此ISO发布的14229-1使用DTC状态…

[附源码]SSM计算机毕业设计志愿者管理系统论文2022JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【VTK+有限元后处理】可视化结果云图

构建vtkUnstructuredGrid对象 为了读取不同格式的有限元计算结果文件,我们先写一个FEDataModel类来管理有限元的几何拓扑和属性信息。 class FEDataModel:"""有限元数据模型类"""def __init__(self):self.nodes [] # 节点几何坐标…

斐波那契数列和斐波那契数

一、什么是斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这…

【考研复试】计算机专业考研复试英语常见问题三(个人选择/学业规划篇)

相关链接: 【考研复试】计算机专业考研复试英语常见问题一(家庭/家乡/学校篇)【考研复试】计算机专业考研复试英语常见问题二(研究方向/前沿技术/本科毕设篇)【考研复试】计算机专业考研复试英语常见问题三&#xff0…

C++---哈希

目录 1. unordered系列关联式容器 1.1 unordered_map 1.1.1 unordered_map的介绍 1.1.2 unordered_map的接口说明 1.2 unordered_set 2. 底层结构 2.1 哈希概念 2.2 哈希冲突 2.3 哈希函数 2.4 哈希冲突解决 2.4.1 闭散列 2.4.2 开散列 3. 封装unorder_map和unord…

MySQL增删改查进阶 — 表的设计

文章目录表的设计1.设计思路2.实体固定关系的套路2.1 一对一关系2.2 一对多关系2.3 多对多关系3.总结表的设计 表的设计实际上要做的工作就是明确一个程序里,需要使用几个数据库,几个表,表里都有哪些列。 1.设计思路 先明确实体再明确实体…

6. Design A Web Crawler

title: Notes of System Design No.10 — Design a Web Crawler description: ‘Design a Web Crawler’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is Web Crawler? Q :uh just for now lets just do html pagesbut your web cr…

Explaining Deepfake Detection by Analysing Image Matching 翻译

点击查看对应的代码 摘要 本文旨在解释深度伪造检测模型在仅由二进制标签做有监督时如何学习图像的伪迹特征。为此,从图像匹配的角度提出如下三个假设。1、深度伪造检测模型表明基于视觉概念的真/假图片既不与源图片相关也不与目标图片相关而是与伪迹图片相关。2、…

全链路压测效能10倍提升的压测工具实践笔记

背景 创业型公司或创新型项目往往团队资源有限,人员能力水平有限,难以投入专业自动化压测人员; 同时部分业务(tob/toc场景)长期有中小型活动场景带来小规模流量并发,需要产研能长期保障并及时感知和解决网…

GitHub Star70K登顶,字节内部数据结构与算法笔记,限时上线

为什么学算法 不得不说,现在几乎所有的大厂,比如Google、字节、BAT,面试的时候都喜欢考算法、让人现场写代码,那你有没有真正地想过,为什么这些大公司都喜欢考算法呢? 经常有人说,程序员35岁之…

Java毕业设计MVC:基于SSM实现计算机硬件评测交流平台

作者主页:编程千纸鹤 作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享 收藏点赞不迷路 关注作者有好处 项目编号&…

(杂)网易云歌单导入到apple music

喜欢apple music的简洁,就想着把网易云的歌单捣鼓进去。 获取歌单歌曲列表:https://yyrcd.com/n2s/ 转移歌单:https://soundiiz.com/zh/,首次使用需要注册,免费版只能一次导入200首。 平台选择apple music 登录授权即可…

Linux下 man命令的使用 及 中文man手册的安装

文章目录1. man命令使用2. 安装中文man手册1. man命令使用 man命令是Linux下最核心的命令之一。而man命令也并不是英文单词“man”的意思,它是单词manual的缩写,即使用手册的意思。man命令会列出一份完整的说明。其内容包括命令语法、各选项的意义及相关…