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的主从信息

 

posted @ 2019-03-01 14:21  NachoLau  阅读(349)  评论(0编辑  收藏  举报