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多路复用, 将连接信息和事件放到队列中, 依次放到文件事件分派器, 事件分派器将事件分发给事件处理器。
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数据备份策略:
- 写crontab定时调度脚本,每小时都copy一份rdb或aof的备份到一个目录中去,仅仅保留最近48小时的备份
- 每天都保留一份当日的数据备份到一个目录中去,可以保留最近1个月的备份
- 每次copy备份的时候,都把太旧的备份给删了
- 每天晚上将当前机器上的备份复制一份到其他机器上,以防机器损坏