• Redis, Python操作Redis, Linux操作Redis, Redis命令, Redis发布订阅, Redis持久化, Redis主从同步


    python操作redis

    #!/usr/bin/env python 
    # -*- coding:utf8 -*-
    
    import redis
    
    r = redis.Redis(host='192.168.11.122',password='123123',port=6379)
    
    r.set('foo', 'Bar')
    print (r.get('foo'))

    重要

    redis数据库在存储字典的时候出现报错,原因是因为当前使用的redis模块不支持存储字典类型的数据,在终端中执行如下指令即可:pip install -U redis==2.10.6
    windows 启动Redis命令 redis-server.exe redis.windows.conf

    线程池操作redis

    '''
    redis-py 使用connection pool 来管理对一个redis server的所有连接,避免每次建立,释放连接的开销
    默认 每个redis实例都会维护一个自己的链接池,然后作为参数redis,这样就可以实现多个redis 实例共享一个连接池
    '''
    import redis
    
    pool = redis.ConnectionPool(host='192.168.11.122',password='123123',port=6379)
    
    r = redis.Redis(connection_pool=pool)
    r.set('name','nacho')
    print(r.get('name'))

    Linux安装redis

    yum install redis -y
    
    或者
    wget http://download.redis.io/releases/redis-3.0.6.tar.gz
    tar xzf redis-3.0.6.tar.gz
    cd redis-3.0.6
    make
    make install

    启动redis

    1. 这里注意对配置文件修改
    1. 打开注释,不然py客户端连不上  
    2. 守护模式不开就no  
    3. 指定配置文件进行启动  
    4. 然后准备设置redis验证密码(不然py连接报错)
    5. 退出,重新登录redis 

    Redis常用命令

    set name 'qwe'
    get name 
    append name ' asd' # 向name的键的值追加asd
    mset user1 'qwe' user2 'asd'
    keys *  # 找到所有key
    del name # 删除key
    set num 10    #string类型实际上不仅仅包括字符串类型,还包括整型,浮点型。redis可对整个字符串或字符串一部分进行操作,而对于整型/浮点型可进行自增、自减操作。
    incr num    #给num string 加一 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,可以用作计数器
    (integer) 11
    decr num      #递减1  

    redis数据结构

    redis是一种高级的key:value存储系统,其中value支持五种数据类型
    字符串(strings)
    散列(hashes)
    列表(lists)
    集合(sets)
    有序集合(sorted sets)

    发布/订阅

    PUBLISH channel msg
    PUBLISH diantai 'kasdhfaoshfd' 将信息 message 发送到指定的频道 channel SUBSCRIBE channel [channel ...] 订阅频道,可以同时订阅多个频道 UNSUBSCRIBE [channel ...] 取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道 PSUBSCRIBE pattern [pattern ...]
    PSUBSCRIBE qw* 订阅一个或多个符合给定模式的频道,每个模式以
    * 作为匹配符,比如 it* 匹配所 有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类 PUNSUBSCRIBE [pattern [pattern ...]] 退订指定的规则, 如果没有参数则会退订所有规则 PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态 注意:使用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,必须Provider和Consumer同时在线。

    redis持久化

    RDB

    redis提供了RDB持久化的功能,这个功能可以将redis在内存中的的状态保存到硬盘中,它可以手动执行。也可以再redis.conf中配置,定期执行。

    RDB持久化产生的RDB文件是一个经过压缩二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。

    rdb配置参数:
    
    dir /data/6379/
    dbfilename  dbmp.rdb
    
    每过900秒 有1个操作就进行持久化
    
    save 900秒  1个修改类的操作
    save 300秒  10个操作
    save 60秒  10000个操作
    
    save  900 1
    save 300 10
    save 60  10000

    1.启动redis服务端,准备配置文件

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379              #定义持久化文件存储位置
    dbfilename  dbmp.rdb        #rdb持久化文件
    bind 10.0.0.10  127.0.0.1    #redis绑定地址
    requirepass redhat            #redis登录密码
    save 900 1                    #rdb机制 每900秒 有1个修改记录
    save 300 10                    #每300秒        10个修改记录
    save 60  10000                #每60秒内        10000修改记录

    2.启动redis服务端

    3.登录redis设置一个key

    redis-cli -a redhat

    4.检查目录,/data/6379底下没有dbmp.rdb文件

    5.通过save触发持久化,将数据写入RDB文件

    AOF

    AOF(append-only log file)记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集

    AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
    优点:最大程序保证数据不丢
    缺点:日志记录非常大

    1.准备aof配置文件 redis.conf

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379
    dbfilename  dbmp.rdb
    requirepass redhat
    save 900 1
    save 300 10
    save 60  10000
    appendonly yes
    appendfsync everysec

    2.启动redis服务

    redis-server /etc/redis.conf

    3.检查redis数据目录/data/6379/是否产生了aof文件

    [root@web02 6379]# ls
    appendonly.aof  dbmp.rdb  redis.log

    4.登录redis-cli,写入数据,实时检查aof文件信息

    [root@web02 6379]# tail -f appendonly.aof

    5.设置新key,检查aof信息,然后关闭redis,检查数据是否持久化

    redis-cli -a redhat shutdown
    redis-server /etc/redis.conf
    redis-cli -a redhat

    rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能

    aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog

    redis主从同步

    redis集群中的数据库同步是通过主从同步来实现的

    1、环境:
    准备两个或两个以上redis实例

    6380.conf

    mkdir /data/638{0..2}  #创建6380 6381 6382文件夹
    
    配置文件示例:
    vim   /data/6380/redis.conf
    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    protected-mode no

    6381.conf

    vim   /data/6381/redis.conf
    port 6381
    daemonize yes
    pidfile /data/6381/redis.pid
    loglevel notice
    logfile "/data/6381/redis.log"
    dbfilename dump.rdb
    dir /data/6381
    protected-mode no

    6382.conf

    port 6382
    daemonize yes
    pidfile /data/6382/redis.pid
    loglevel notice
    logfile "/data/6382/redis.log"
    dbfilename dump.rdb
    dir /data/6382
    protected-mode no

    启动三个redis实例

    redis-server /data/6380/redis.conf
    redis-server /data/6381/redis.conf
    redis-server /data/6382/redis.conf

    主从规划

    主节点:6380
    从节点:63816382

    配置主从同步

    6381/6382命令行

    redis-cli -p 6381
    SLAVEOF 127.0.0.1 6380  #指明主的地址
    
    redis-cli -p 6382
    SLAVEOF 127.0.0.1 6380  #指明主的地址

    检查主从状态

    从库:

    127.0.0.1:6382> info replication
    127.0.0.1:6381> info replication

    主库:

    127.0.0.1:6380> info replication

    测试写入数据,主库写入数据,检查从库数据

    127.0.0.1:6380> set name chaoge
    
    
    从
    127.0.0.1:6381>get name 

    手动进行主从复制故障切换

    #关闭主库6380
    redis-cli -p 6380
    shutdown

    检查从库主从信息,此时master_link_status:down 

    redis-cli -p 6381
    info replication
    
    redis-cli -p 6382
    info replication

    在6381 6382之间选一个新的主库

    1.关闭6381的从库身份

    redis-cli -p 6381
    info replication
    slaveof no one

    2.将6382设为6381的从库

    6382连接到6381:
    [root@db03 ~]# redis-cli -p 6382
    127.0.0.1:6382> SLAVEOF no one
    127.0.0.1:6382> SLAVEOF 127.0.0.1 6381

    3.检查6382,6381的主从信息

  • 相关阅读:
    操作数据库pymysql
    深度学习-目标检测(Fast R-CNN)
    解释--全连接层输入大小固定
    深度学习-目标检测(IOU)
    深度学习-目标检测(SPPNet)
    深度学习-目标检测(R-CNN)
    机器学习-Whitening(白化)
    Win10 将slim加入PYTHONPYTH
    tensorboard 使用
    卷积神经网络--padding
  • 原文地址:https://www.cnblogs.com/NachoLau/p/10456177.html
Copyright © 2020-2023  润新知