一、redis的数据持久化
RDB持久化:快照,只记录一个时刻内存数据状态(快照记录某一时刻的数据) AOF持久化:只追加日志文件的方式,记录了redis里面所有的修改命令 RDB记录某一时刻的,还可以用做备份 AOF比较安全,但是比较啰嗦,每次都把所有的搜保存下来了 #如果配置持久化功能 方式一: RDB 持久化配置:还是修改配置文件 dbfilename dump.rbd dir '/application/data/6379' save 900 1 900秒内有一个更改 save 300 10 300秒内有10个更改 save 60 10000 60秒内有10000个更改 #也可以设置配置做持久化 方式二: set foo bar save 或者 bgsave #手工触发持久化 #配置扩展
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
#AOF 配置 appendonly yes applendfsync every
二、redis数据类型
计数器 incr fensi ##你点击一下增加一下,刷点击量 incrby fensi 10000 DECR fensi #递减 DECRBY fensi 20 set foo bar set foo ex 10 hset stu(表) id(列) 100 hmset stu id 100 name zhangsna lpush pengyouquan 'today is nice day' lpush pengyouquan 'today is bad day' lpush pengyouquan 'today is a day' lpop pengyouquan #删除最后一条 lrange pengyouquan 0 -1 #查看所有 有序集合:像是排行榜
三、发布订阅模式
发布订阅模式(中间桥梁:频道):朋友圈是很好的证明。先关注你就能看到 开两个端口 PUBLISH weibo hello 先订阅某个频道 SUBSCRIBE weibo 订阅weibo一个频道,subscribe PSUBSCRIBE * 一次性订阅多个频道(广告类) PSUBSCRIBE it.* 一次性订阅多个和it相关的频道 退出就取消订阅了
四、redis的事务管理
redis使用multi开启事物 discard 撤销 exec UI出 redis 中的锁机制 mysql的悲观锁:我在做操作的时候,你别和我抢, redis的乐观锁:查看一下,
五、redis的一些管理命令
Info Clinet list 客户端连接的状况以及对系统的使用情况 Client kill ip:port config get * CONFIG RESETSTAT 重置统计 CONFIG GET/SET 动态修改 Dbsize FLUSHALL 清空所有数据 select 1 FLUSHDB 清空当前库 MONITOR 监控实时指令
六、主从复制
假如说你访问redis呢,访问不了呢,数据查看不了了,怎么办? 我们要做到一个恢复的功能,所以就有了主从复制的功能 假如说一个机器废了,还有另一个机器能提供数据 至少要有两台服务器 主从复制的两种功能 1、可以实现故障的转移 failover 2、可以分担多节点的压力 blance 底层原理依赖于 同步传输rbd存储的机制 怎么搭建主从? 准备2台或以上的redis实例 1、多配置文件(端口、数据路径、日志路径、pid) 端口、:6380(主),6381(从) 数据路径: /application/data/6380 /application/data/6381 日志路径 /var/log/redis6380.log /var/log/redis6381.log pid :记录一个程序进程号的id /application/data/6380/redis.pid /application/data/6381/redis.pid 2、主从复制的配置过程 1、创建目录 mkdir -p /application/data/6380 mkdir -p /application/data/6381 2、配置文件准备 vim /application/data/6380/redis.conf port 6380 daemonize yes pidfile /application/data/6380/redis.pid logfile "/var/log/redis6380.log" dbfilename dump.rdb dir /application/data/6380 vim /application/data/6381/redis.conf port 6381 daemonize yes pidfile /application/data/6381/redis.pid logfile "/var/log/redis6381.log" dbfilename dump.rdb dir /application/data/6381 3、启动两个实例 redis-server /application/data/6380/redis.conf redis-server /application/data/6381/redis.conf 4、构建主从 redis-cli -p 6381 slaveof 127.0.0.1 6380 5、验证主从 登录主库: redis-cli -p 6380 set foo bar 登录主库: redis-cli -p 6381 get 6、主从复制状态查看。 role info replication 7、主从复制,手工切换 slaveof no one 传统主从的缺陷 1、没有自动监控机制 2、没有自动切换的功能 3、对于应用不透明 sentinel 功能 1、自动监控redis所有节点状态 2、发现主库故障,自动选主切换 3、自动通知应用端 准备,1主2从结构比较合适。 添加6382节点: mkdir -p /application/data/6382 vim /application/data/6382/redis.conf port 6382 daemonize yes pidfile /application/data/6382/redis.pid logfile "/var/log/redis6382.log" dbfilename dump.rdb dir /application/data/6382 redis-server /application/data/6382/redis.conf redis-cli -p 6382 slaveof 127.0.0.1 6380 sentinel配置 mkdir -p /application/data/26380 vim /application/data/26380/sentinel.conf port 26380 dir "/application/data/26380" sentinel monitor mymaster 127.0.0.1 6380 1 sentinel down-after-milliseconds mymaster 60000 sentinel config-epoch mymaster 0 启动 redis-sentinel /application/data/26380/sentinel.conf
七、Python sentinel
>>> from redis.sentinel import Sentinel >>> sentinel = Sentinel([('127.0.0.1', 26380)], socket_timeout=0.1) >>> sentinel.discover_master('mymaster') ('127.0.0.1', 6379) >>> sentinel.discover_slaves('mymaster') [('127.0.0.1', 6380)] >>> master = sentinel.master_for('mymaster', socket_timeout=0.1) >>> slave = sentinel.slave_for('mymaster', socket_timeout=0.1) >>> master.set('foo', 'bar') >>> slave.get('foo') 'bar'
一、redis的数据持久化
RDB持久化:快照,只记录一个时刻内存数据状态(快照记录某一时刻的数据) AOF持久化:只追加日志文件的方式,记录了redis里面所有的修改命令 RDB记录某一时刻的,还可以用做备份 AOF比较安全,但是比较啰嗦,每次都把所有的搜保存下来了 #如果配置持久化功能 方式一: RDB 持久化配置:还是修改配置文件 dbfilename dump.rbd dir '/application/data/6379' save 900 1 900秒内有一个更改 save 300 10 300秒内有10个更改 save 60 10000 60秒内有10000个更改 #也可以设置配置做持久化 方式二: set foo bar save 或者 bgsave #手工触发持久化 #配置扩展
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
#AOF 配置 appendonly yes applendfsync every
二、redis数据类型
计数器 incr fensi ##你点击一下增加一下,刷点击量 incrby fensi 10000 DECR fensi #递减 DECRBY fensi 20 set foo bar set foo ex 10 hset stu(表) id(列) 100 hmset stu id 100 name zhangsna lpush pengyouquan 'today is nice day' lpush pengyouquan 'today is bad day' lpush pengyouquan 'today is a day' lpop pengyouquan #删除最后一条 lrange pengyouquan 0 -1 #查看所有 有序集合:像是排行榜
三、发布订阅模式
发布订阅模式(中间桥梁:频道):朋友圈是很好的证明。先关注你就能看到 开两个端口 PUBLISH weibo hello 先订阅某个频道 SUBSCRIBE weibo 订阅weibo一个频道,subscribe PSUBSCRIBE * 一次性订阅多个频道(广告类) PSUBSCRIBE it.* 一次性订阅多个和it相关的频道 退出就取消订阅了
四、redis的事务管理
redis使用multi开启事物 discard 撤销 exec UI出 redis 中的锁机制 mysql的悲观锁:我在做操作的时候,你别和我抢, redis的乐观锁:查看一下,
五、redis的一些管理命令
Info Clinet list 客户端连接的状况以及对系统的使用情况 Client kill ip:port config get * CONFIG RESETSTAT 重置统计 CONFIG GET/SET 动态修改 Dbsize FLUSHALL 清空所有数据 select 1 FLUSHDB 清空当前库 MONITOR 监控实时指令
六、主从复制
假如说你访问redis呢,访问不了呢,数据查看不了了,怎么办? 我们要做到一个恢复的功能,所以就有了主从复制的功能 假如说一个机器废了,还有另一个机器能提供数据 至少要有两台服务器 主从复制的两种功能 1、可以实现故障的转移 failover 2、可以分担多节点的压力 blance 底层原理依赖于 同步传输rbd存储的机制 怎么搭建主从? 准备2台或以上的redis实例 1、多配置文件(端口、数据路径、日志路径、pid) 端口、:6380(主),6381(从) 数据路径: /application/data/6380 /application/data/6381 日志路径 /var/log/redis6380.log /var/log/redis6381.log pid :记录一个程序进程号的id /application/data/6380/redis.pid /application/data/6381/redis.pid 2、主从复制的配置过程 1、创建目录 mkdir -p /application/data/6380 mkdir -p /application/data/6381 2、配置文件准备 vim /application/data/6380/redis.conf port 6380 daemonize yes pidfile /application/data/6380/redis.pid logfile "/var/log/redis6380.log" dbfilename dump.rdb dir /application/data/6380 vim /application/data/6381/redis.conf port 6381 daemonize yes pidfile /application/data/6381/redis.pid logfile "/var/log/redis6381.log" dbfilename dump.rdb dir /application/data/6381 3、启动两个实例 redis-server /application/data/6380/redis.conf redis-server /application/data/6381/redis.conf 4、构建主从 redis-cli -p 6381 slaveof 127.0.0.1 6380 5、验证主从 登录主库: redis-cli -p 6380 set foo bar 登录主库: redis-cli -p 6381 get 6、主从复制状态查看。 role info replication 7、主从复制,手工切换 slaveof no one 传统主从的缺陷 1、没有自动监控机制 2、没有自动切换的功能 3、对于应用不透明 sentinel 功能 1、自动监控redis所有节点状态 2、发现主库故障,自动选主切换 3、自动通知应用端 准备,1主2从结构比较合适。 添加6382节点: mkdir -p /application/data/6382 vim /application/data/6382/redis.conf port 6382 daemonize yes pidfile /application/data/6382/redis.pid logfile "/var/log/redis6382.log" dbfilename dump.rdb dir /application/data/6382 redis-server /application/data/6382/redis.conf redis-cli -p 6382 slaveof 127.0.0.1 6380 sentinel配置 mkdir -p /application/data/26380 vim /application/data/26380/sentinel.conf port 26380 dir "/application/data/26380" sentinel monitor mymaster 127.0.0.1 6380 1 sentinel down-after-milliseconds mymaster 60000 sentinel config-epoch mymaster 0 启动 redis-sentinel /application/data/26380/sentinel.conf
七、Python sentinel
>>> from redis.sentinel import Sentinel >>> sentinel = Sentinel([('127.0.0.1', 26380)], socket_timeout=0.1) >>> sentinel.discover_master('mymaster') ('127.0.0.1', 6379) >>> sentinel.discover_slaves('mymaster') [('127.0.0.1', 6380)] >>> master = sentinel.master_for('mymaster', socket_timeout=0.1) >>> slave = sentinel.slave_for('mymaster', socket_timeout=0.1) >>> master.set('foo', 'bar') >>> slave.get('foo') 'bar'