初识redis与redis持久化

70 阅读4分钟

1 认识Redis

1.1 redis安装

下载地址:http://redis.io/download
安装步骤: 
安装gcc  
yum install gcc 
把下载好的redis‐5.0.3.tar.gz放在/usr/local文件夹下,并解压 
wget http://download.redis.io/releases/redis‐5.0.3.tar.gz
tar xzf redis‐5.0.3.tar.gz

# 进入到解压好的redis‐5.0.3目录下,进行编译与安装 
make 
# 修改配置 
daemonize yes 
#后台启动 
protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis 
# 需要注释掉bind 
#bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户 端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可) 
# 启动服务 
src/redis‐server redis.conf 
# 验证启动是否成功 
ps ‐ef | grep redis

1.2 redis 常用命令

单值缓存

SET key value
GET key value

对象缓存

SET user:1 json
MSET user:1:name zhangsan user:1:age 28
MGET user:1:name user:1:age

//hash  bigkey 问题

HMSET user {id}:name lala {id}:age 28
HMGET user {id}:name {id}:age

分布式锁

SETNX product:101 true  //1成功
SETNX product:101 true  //0失败

计数器

incr readcount:{id}

incrby countId 1000

抽奖

//set
sadd key  id
smembers key
srangemembers key [count]

点赞

sadd  点赞 
srem  取消
sismember key id 检查是否点赞
scard key 获取点赞数

#共同关注
sinter 交集
sunion 并集

#可能认识的人
sdiff 差集  第一个集合减去后边集合的并集

排行榜

zincrby key 1 value
zrevrange key 0 9 withscores

redis数据结构

string hash list set zset

1.3 redis 单线程和高性能

  • redis的网络io和键值对读写是由一个线程完成,redis的持久化,集群同步和异步删除等其他功能是由其他线程完成
  • redis所有数据都在内存中,内存计算加单线程避免多线程上下文切换损耗性能,所以redis高性能
  • Redis的IO多路复用: redis利用epoll来实现IO多路复用, 将连接信息和事件放到队列中, 依次放到文件事件分派器, 事件分派器将事件分发给事件处理器。

image.png

2 redis持久化

2.1 rdb

redis在默认情况下会将数据保存到dump.rdb(二进制文件),可以通过执行save,或者bgsave保存数据到文件中,覆盖原有的文件

  • save: 同步会阻塞
  • bgsave:写时复制,异步保存数据;在保存成功时可能有新的数据写入没有保存

配置文件 save m n; 后台使用bgsave模式保存数据,每m秒有至少n个健被改变时触发保存

2.2 aof

将执行的命令写到aof文件

appendonly yes 打开aof
appendfsync always:每次有新命令追加到AOF文件时就执行一次
fsync,非常慢,也非常安全。
appendfsync everysec:每秒fsync一次,足够快,并且在故障时只会丢失1秒钟的数据。
appendfsync no:从不fsync,将数据交给操作系统来处理。更快,也更不安全的选择。

aof重写

aof可能存在很多没用的指令,aof会定期根据内存的最新数据重写aof文件

#auto‐aof‐rewrite‐min‐size64mb//aof文件至少要达到64M才会自动重写,文件太小恢复速度本来就很快,重写的意义不大
#auto‐aof‐rewrite‐percentage100//aof文件自上一次重写后文件大小增长了100%则再次触发重写
  • rdb: 启动优先级低,保存文件小,恢复快,容易丢数据
  • aof: 启动优先级高,保存文件大,恢复慢,丢数据根据策略决定

2.3 redis 4.0混合持久化

开启混合持久化时,在aof重写时会将这一刻之前的内存数据的做rdb快照处理与增量aof的修改命令一起写入新的appendonly.aof文件,覆盖原来的aof文件

在redis重启时,会先加载rdb内存数据,再重放aof命令就可以替代之前aof全量文件的重放,启动效率提高

#aof‐use‐rdb‐preambleyes //开启混合持久化,必须先开启rdb

Redis数据备份策略

  1. 写crontab定时调度脚本,每小时都copy一份rdb或aof的备份到一个目录中去,仅仅保留最近48小时的备份
  2. 每天都保留一份当日的数据备份到一个目录中去,可以保留最近1个月的备份
  3. 每次copy备份的时候,都把太旧的备份给删了
  4. 每天晚上将当前机器上的备份复制一份到其他机器上,以防机器损坏