数据库 | 初识Redis 2



一、与Python交互

  • 引入模块
    from redis import *

这个模块中提供了StrictRedis对象,用于连接redis服务器,并按照不同类型提供了不同方法,进行交互操作

  • 使用redis服务
from redis import *


if __name__ == '__main__':
    # 创建redis服务的连接对象
    # 默认StrictRedis(host="127.0.0.1", port=6379)
    r = StrictRedis()
    # 调用String类型数据的增删改查的方法
    r.set("py", "666")
    r.set("py", "555")
    r.delete("py")
    r_dara = r.get("py")
    print(type(r_dara))
    if r_dara:
        print(r_dara.decode())

系统 说明
Windows 下载地址:

https://github.com/MicrosoftArchive/redis/releases



使用说明:

二、主从配置

一个master可以拥有多个slave
一个slave又可以拥有多个slave
如此下去,形成了强大的多级服务器集群架构

提示:

  • 读写分离
  • 主机主要是写入数据
  • 从机只能读数据,不能完成数据的写入操作

eg:

将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器

主机——192.168.1.10的机器
vim /etc/redis.conf

bind 192.168.1.10

从机——192.168.1.11的机器

bind 192.168.1.11
slaveof 192.168.1.10 6379

Q1: 云服务器CentOS7修改redis的配置中的IP地址为外网地址后,用systemctl重启后失败

不能改为外网地址,因为公网(外网)是映射得到的,bind地址必须是内网地址或127.0.0.1,但主机配置redis时必须用内网地址

参阅

Q2:主机是云服务器,从机是虚拟机中的服务器,从机中slaveof后的地址是云服务器的外网地址而不是用内网地址,端口号就是主机的redis服务的端口号

三、搭建集群

集群至少三主三从
必须有3个及以上的主节点时,才可以创建集群,否则会失败

  • 优点:
    抗风险、主从替换保证数据的完整性

  • 搭建方式:

为了演示,选择在两台机器上通过六个配置文件启动6个redis服务

注意:

  • 仅仅看效果,最好就选一台机器运行6个redis服务就行了,我一个云服务器一个虚拟机就失败,后面只用一台云服务器或虚拟机就成功了
  • 云服务器单个运行6个redis服务时,配置文件ip用内网地址,redis-trib命令的ip用外网地址
  • 开启机器对应端口


eg:

单个机器配置6个的话(配置文件IP是7000-7005),就开启7000/7005和17000/17005共12个端口

  • 集群服务的配置文件的信息示例
    注意根据自己的电脑IP修改IP地址

eg:

  • IP地址为192.168.12.107的主机
    三个文件的配置区别在port、pidfile、cluster-config-file三项

主机1

port 7000
bind 192.168.12.107
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes

主机2

port 7001
bind 192.168.12.107
daemonize yes
pidfile 7001.pid
cluster-enabled yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes

主机3

port 7002
bind 192.168.12.107
daemonize yes
pidfile 7002.pid
cluster-enabled yes
cluster-config-file 7002_node.conf
cluster-node-timeout 15000
appendonly yes
  • IP地址为192.168.12.108的从机
    三个文件的配置区别在port、pidfile、cluster-config-file三项

从机1

port 7003
bind 192.168.12.108
daemonize yes
pidfile 7003.pid
cluster-enabled yes
cluster-config-file 7003_node.conf
cluster-node-timeout 15000
appendonly yes

从机2

port 7004
bind 192.168.12.108
daemonize yes
pidfile 7004.pid
cluster-enabled yes
cluster-config-file 7004_node.conf
cluster-node-timeout 15000
appendonly yes

从机3

port 7005
bind 192.168.12.108
daemonize yes
pidfile 7005.pid
cluster-enabled yes
cluster-config-file 7005_node.conf
cluster-node-timeout 15000
appendonly yes

3.1 搭建过程

  • 创建服务的目录
    mkdir redis
    cd redis
  • 编写配置文件

IP地址为192.168.12.107的主机
vim 7000.conf
vim 7001.conf
vim 7002.conf

IP地址为192.168.12.108的从机
vim 7003.conf
vim 7004.conf
vim 7005.conf

  • 启动服务
    启动不了,就关闭网络再试试

格式:redis-server 配置文件
进程查看:ps aux| grep redis

IP地址为192.168.12.107的主机

redis-server 7000.conf
redis-server 7001.conf
redis-server 7002.conf

IP地址为192.168.12.107的从机

redis-server 7003.conf
redis-server 7004.conf
redis-server 7005.conf

  • 安装redis-trib
    Redis 集群命令行工具

yum install redis-trib -y

  • 创建集群
    注意开启对应端口

redis-trib create --replicas 1 192.168.12.107:7000 192.168.12.107:7001 192.168.12.107:7002 192.168.12.108:7003 192.168.12.108:7004 192.168.12.108:7005

Q3:不知道为什么云服务器执行redis-trib create时,就会无法访问我的虚拟机;而虚拟机执行,就可以进入下一步了?

Q4:到了这一步,我一个云服务器和一个虚拟机的做法就进行不下去了?无线等待

换了方式:直接在云服务器中运行6个redis服务,而不采用一个虚拟机一个云服务器的做法,这次成功了

提示:

  • slot哈希槽,用来存储数据的,16384个哈希槽就意味着可以存储16384条数据

参阅:

3.2 验证集群

当存活的主节点数低于总节点数的一半时,整个集群无法提供服务

进入集群的redis-cli命令格式:redis-cli -h IP地址 -c -p 端口号
参数:-c表示连接到集群

  • CRC16算法
    默认16384个哈希槽(hash slot)

管理在哪个服务器上写数据,有去中心化等特点

3.4 集群性能指标

Redis是个单线程模型
对于1G带宽来说,延迟时间一般是200μs

通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息

info命令输出的数据可分为9个类别

数据类别 说明
Server info server

Clients info clients

Memory info memory



used_memory 内存使用率
Persistence info persistence

Stats info stats

Replication info replication

CPU info cpu

Cluster info cluster

Keyspace info keyspace

3.3.1 内存使用率

3.3.2 命令处理数

命令处理总数确实是处于上升或下降状态,有2个原因引起的:
➢ 命令队列里的命令数量过多,后面命令一直在等待中
➢几个慢命令阻塞Redis

解决办法:
➢ 使用多参数命令
➢ 管道命令
➢ 避免操作大集合的慢命令

3.3.3 响应时间

查看响应时间:redis-cli --latency -h 127.0.0.1 -p 6379

参阅:

3.4 集群与Python交互

  • 安装redis-py-cluster
    pip3 install redis-py-cluster

注意加入自己主机的外网IP

第一种解码方式:
.decode()

from rediscluster import RedisCluster


if __name__ == '__main__':
    # 创建集群的连接对象
    startup_nodes = [
                        {'host': 'IP', 'port': '7000'},
                        {'host': 'IP', 'port': '7001'},
                        {'host': 'IP', 'port': '7002'}]
    rc = RedisCluster(host="IP", startup_nodes=startup_nodes)
    rc.set("py666", 666)
    rc_data = rc.get("py666").decode()
    print(rc_data)

第二种解码方式:
decode_responses=True

from rediscluster import RedisCluster


if __name__ == '__main__':
    # 创建集群的连接对象
    startup_nodes = [
                        {'host': 'IP', 'port': '7000'},
                        {'host': 'IP', 'port': '7001'},
                        {'host': 'IP', 'port': '7002'}]
    rc = RedisCluster(host="IP", startup_nodes=startup_nodes, decode_responses=True)
    rc.set("py666", 666)
    rc_data = rc.get("py666")
    print(rc_data)

更新中......


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353