04-Redis
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存储和加载rdb文件时校验
设置rdb文件名 设置工作目录,rdb文件会写入 该目录
Redis:RDB的缺点
断电 在2个保存点之间,断电, 将会丢失1-N分钟的数据 出于对持久化的更精细要求,redis增添了aof方式 append only file
Redis:AOF持久化
• AOF的工作原理:
Redis集群
• 集群的作用
– 主从备份 防止主机宕机 – 读写分离,分担master的任务 – 任务分离,如从服分别分担备份工作与计算工作
• Redis的集群
slave1 master slave1 slave2
master
slave2
第2种方式的好处: master宕机后,可以直接切换到slave1
• 持久化# Persistence
– rdb_changes_since_last_save:0 – rdb_last_save_time:1375224063
Redis运行时的观察参数(续)
• fork耗时#Status
– latest_fork_usec:936 上次持久化花费微秒
• 慢日志
SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。 UNSUBSCRIBE [channel [channel ...]] 指示客户端退订给定的频道。 如果没有频道被指定,也即是,一个无参数的 UNSUBSCRIBE 调用被执行, 那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订 PUNSUBSCRIBE [pattern [pattern ...]] 指示客户端退订所有给定模式。
Master和Slave的通信过程
sync[自动] dump出rdb
master 缓冲的aof
slave
replicationFeedSlaves
Redis集群的配置
• Master配置:
– 关闭rdb快照(备份工作交给slave) – 可以开启aof
• Slave配置:
– – – – 声明slave-of 配置密码[如果master有密码] [某1个]slave打开 rdb快照功能 配置是否只读[slave-read-only]
• Redis的高级特性
– – – – 数据结构丰富 持久化 支持简单事务 主从配置方便
Redis的安装
• 安装:
– 不必configure – make – make PREFIX=/usr/local/redis install
redis-3.0.5.tar.gz
• 启服务 • ./redis-server /path/to/redis.conf
##当前sentinel实例是否允许实施“failover”(故障转移) ##no表示当前sentinel为“观察者”(只参与"投票".不参与实施failover), ##全局中至少有一个为yes sentinel can-failover def_master yes ##sentinel notification-script mymaster /var/redis/notify.sh
Redis运行时的观察参数
• 内存# Memory
– used_memory:859192 数据结构的空间 – used_memory_rss:7634944 实占空间 – mem_fragmentation_ratio:8.89 前2者的比例,1.N为佳
• 主从复制# Replication
– – – – role:slave master_host:192.168.1.128 master_port:6379 master_link_status:up
Sentinel监控配置
sentinel monitor def_master 127.0.0.1 6379 2 sentinel auth-pass def_master 012_345^678-90
##master被当前sentinel实例认定为“失效”的间隔时间 ##如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么 ##当前sentinel就认为master失效(SDOWN,“主观”失效) ##<mastername> <millseconds> ##默认为30秒 sentinel down-after-milliseconds def_master 30000
Redis:RDB快照持久化
• rdb的工作原理:
– 每隔N分钟或N次写操作后, 从内存dump数据形成rdb文件,压缩放在备份目录
参数值名称
说明 刷新快照到硬盘中,必须满足 两者要求才会触发,即900秒之 后至少1个关键字发生变化。 必须是300秒之后至少10个关 键字发生变化。
• 相关参数: save 900 1
Redis的连接
• Redis的协议是基础文本的协议,(http,memcached也是)客户端的开发较 为简便。 • Redis官方提供了C,java,C#,PHP,lua脚本的客户端 • 我们在学习时,用到redis-cli 官方客户端及Java-Redis客户端 • 在与redis-server同一目录下,redis-cli即是
commons-pool-1.5.4.jar
jedis-2.1.0.jar
Redis运维常用的server端命令
命令
TIME DBSIZE BGREWRITEAOF BGSAVE SAVE LASTSAVE SLAVEBaidu NhomakorabeaF FLUSHALL FLUSHDB
说明
查看时间戳与微秒数 查看当前库中的key数量 后台进程重写AOF 后台保存rdb快照 保存rdb快照 上次保存时间 设为slave服务器 清空所有db 清空当前db
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes rdbcompression yes
必须是60秒之后至少10000个 关键字发生变化。
后台存储错误停止写。 使用LZF压缩rdb文件
rdbchecksum yes
dbfilename dump.rdb dir ./
Redis的键值操作-1
操作 keys pattern randomkey exists key type key 说明 支持*,?,[]匹配 随机返回key,但不删除 判断key是否存在,返回1/0 判断key的类型。返回string,set,zset,link,hash
expire key
pexpire key persist key ttl key pttl key
– config get/set slowlog-log-slower-than – CONFIG get/SET slowlog-max-len – slow log get 获取慢日志
Sentinel监控主从服务器
通信 sentinel
slave2 master
slave1
通信失败
slave1 变成 master
• Remote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的 key-value存储系统。 • Redis提供了一些丰富的数据结构
– 包括 lists, sets, ordered sets 以及 hashes , – 还有和Memcached一样的 strings结构. – Redis当然还包括了对这些数据结构的丰富操作。
Redis基本操作的经典案例
• • 背景:网站用户的登录情况 问题:
– 1亿个用户。有经常登录的,有不经常登录的 – 如何记录用户的登录信息 – 如何来查询活用户,如一周登录3次的用户
Redis的事务和锁机制
watch key1 key2 unwtach [key1 key2 multi command command ... discard/exec
用秒设置生命周期
用毫秒设置生命周期 使key变为永久 查询key的剩余生命周期(返回秒) 查询key的剩余生命周期(返回毫秒) 对于不存在的key或过期key,返回-1 redis2.8对于不存在的key返回-2
Redis的键值操作-2
操作 DEL key [key ...] rename key newkey renamenx key newkey move key db 说明 删除多个key,返回真正被删除的key数量 重命名key->newkey。如果newkey存在,值被覆盖 同rename,只是newkey存在时,不进行操作 移动key到另一个db,如果另一db有相同key,不做操作
基于内存亦可持久化的日志型数据库
Redis
赵渝强 collen7788@126.com
Agenda
• • • • • • • • • • Redis特点及安装 Redis键值操作 Redis数据类型 事务和锁机制 消息订阅 持久化 集群 Redis的Java客户端 运维 仿微博实战
Redis的特点和安装
Redis主从复制的缺陷
• 缺陷:
– 每次salave断开后,(无论是主动断开,还是网络故障),再连接master
• 都要master全部dump出来rdb,再aof,即同步的过程都要重新执行1遍. • 所以要记住---多台slave不要一下都启动起来,否则master可能IO剧增
Redis的Java客户端
Redis的数据类型及命令
字符串 链表
Redis的数 据类型
集合(无序、 有序)
Hash(Map)
字符串类型
• String:最基础的类型,二进制的数据 512M • set 、get、append • mset 、mget 、incr、decr
链表List
• lpush、lrange、lpop • rpush、rrange、rpop
• 注意:如果命令格式有误,exec会报错 • 如果命令格式不错,只是逻辑错,exec不执行正确的命令---需要程序员去 负责
Redis消息的发布和订阅
subscribe<------频道----------publish subscribe news --订阅新闻频道 publish news 内容--发布新闻内容 适宜做在线聊天,消息推送
set append ... ... 写操作
后台 日志 进程 aof文件
redis主进程
1:每个命令重写一次aof? 2:某key操作100次,产生100行记录,aof文件会很大,怎么解决?
Redis:AOF的配置参数
参数值名称
appendonly no
说明
是否仅要日志
appendfsync no
appendfsync always appendfsync everysec no-appendfsync-on-rewrite yes auto-AOF-rewrite-percentage 100 auto-AOF-rewrite-min-size 64mb
系统缓冲,统一写,速度快
系统不缓冲,直接写,慢,丢失数据少 每秒写1次 正在导出rdb快照的过程中,要不要 停止同步aof aof文件大小比起上次重写时的大小 ,增长率100%时,重写 aof文件,至少超过64M时,重写
Redis的持久化
• 持久化: 即把数据存储于断电后不会丢失的设备中,通常是硬盘. • 常见的持久化方式:
– 主从:通过从服务器保存和持久化,如mongoDB的replication sets配置 – 日志:操作生成相关日志,并通过日志来恢复数据
• Redis的持久化方式
– RDB快照持久化 – AOF
命令
SLOWLOG INFO CONFIG GET CONFIG SET MONITOR SYNC CLIENT LIST CLIENT KILL CLIENT SETNAME CLIENT GETNAME
说明
显示慢查询 显示服务器信息 获取配置信息 设置配置信息 打开控制台 主从同步 客户端列表 关闭某个客户端 为客户端设置名字 获取客户端名字
Hash Map
• hset 、hget • hmset hmget • hgetall
集合
• Set:无序的集合、不可重复
– sadd 、smembers – sdiff、sinter、sunion
• Sortedset:一个可以排序的集合,根据(scores)来排序
– zadd 、zrange、zrangebyscore – zrevrange、zrevrangebyscore