day 91 redis

redis

1. redis 部署安装

redis 编译安装

  1. 规划目录
    /data/soft/ #redis下载目录
    /opt/redis_{PORT}/{conf,logs,pid} #redis安装目录
    /data/redis_{PORT}/redis_{PORT}.rdb #redis数据目录
    /root/scripts/redis_shell.sh #redis运维脚本

  2. 安装 命令
    编辑host文件
    10.0.0.51 db01
    10.0.0.52 db02
    10.0.0.53 db03

  3. 编译安装
    Yum install -y gcc 下载依赖软件
    Make distclean 清除编译缓存

  4. 创建目录
    Mkdir -p /data/soft
    Mkdir -p /data/redis_6379
    Mkdir -p /opt/redis_6379{conf,pid,logs}

  5. 下载软件压缩包
    Cd /data/soft
    wget [http://download.redis.io/releases/redis-3.2.9.tar.gz] (http://download.redis.io/releases/redis-3.2.9.tar.gz)

  6. 解压软件包
    Tar zxf redis-3.2.9.tar.gz -C (指定文件解压路径) /opt/
    ln -s /opt/redis-3.2.9/ /opt/redis 创建软连接
    cd /opt/redis

  7. 编译
    make && make install

2. 编写配置文件

cat >/opt/redis_6379/conf/redis_6379.conf <

3. 启动redis

  redis-server  /opt/redis_6379/conf/redis_6379.conf 

4. 检查服务是否启动

   pe -ef|grep  redis
   netstat  -lntup |grep  redis 

5. 进入redis

redis -cli  

redis 全局操作命令

1. 写入key

set key "1"  values "1"    
set  k"1"   v"1"  

set k 1 v1 k2 v2 k3 v3

2. 查看所有keys (线上环境禁止使用)

keys * 

3. 查看有多少个key 估值

DBSIZE

4. 查看key值是否存在

EXISTS   k1 
EXISTS  k1  k2  k3  

返回状态码:
0 表示这个key 不存在
1 表示这个key 存在
N 表示有N个key存在

5. 删除key

Del k1
Del k1 k2 k3
状态码 :
0 表示这个key不存在
1 表示这个key存在,并且删除成功
N 表示有N个key存在 , 并且删除N个key

6 . 键过期

设置过期时间 EXPIPE K1 100
取消过期时间 PESIST k1
状态码 :
0 表示这个key 不存在
1 表示这个key存在 , 并且设置过期时间成功

7. 查看key是否过期

TTL k1
状态码 :
-1 这个key存在过 ,并且永不过期
-2 这个key不存在
N 这个key存在 ,并且在N秒后过期
(过期后的key直接会被删除)

字符串操作

  1. 设置一个key set k1 v1
  2. 查看一个key get k1
  3. 设置多个key mset k1 v1 k2 v2 k3 v3
  4. 查看多个key mget k1 k2 k3
  5. 天然计数器
    加1 :
    Set k1 1
    Incr k1
    Get k1
    加N INCRBY k1 100
    减1 : INCRBY k1 -1
    减N : INCRBY k1 –N

列表操作

  1. 插入列表 :
    LPUSH : 从列表左侧插入数据
    RPUSH : 从列表右侧插入数据
    LPUSH list1 1
    LPUSH list1 2
    LPUSH list1 3
    RPUSH list1 4
    RPUSH list1 5
    RPUSH list1 6
  2. 查看列表长度 LLEN “list 1”
  3. 查看列表的内容 :
    127.0.0.1:6379> LRANGE list1 0 -1
  1. "3"
  2. "2"
  3. "1"
  4. "4"
  5. "5"
  6. "6"
  1. 删除列表元素 :
    LPOP : 从列表的左侧删除
    RPOP : 从列表的右侧删除
    LPOP “list1”
    RPOP “list2”
    删除列内容 :
    DEL “list1”

哈希

  1. 哈希:
    Hash看起来就像一个’hash’的样子.由键值对组成
    HMSET指令设置hash中的多个域
    HGET取回单个域
    HMGET取回一系列的值
  2. 生成一个hash类型
    HMSET user :1 name 嚣张 job IT age 27
    HMSET user:2 name 小刚 job IT age 23
    HMSET user: 3 name 小杨 job IT age 22
  3. 查看hash 里的一个值 HMGET user: 1 name
  4. 查看hash 里的多个值 HMGET user : 1 name age job
  5. 查看hash 里的所有值 HGETALL user : 1
  6. MySQL 数据和redis 哈希对比
    uid name job age
    1 xiaozhang it 28
    2 xiaoya it 28
    3 yazhang it 28
    Select * from user where id = 3

redis缓存mysql数据
名字 key1 k1值 key2 k2的值 key3 k3的值
uid:1 name xiaozahng job it age 28
uid:2 name xiaoya job it age 28
uid:3 name yazahng job it age 28

集合操作

  1. 创建集合
    db01:6379> SADD set1 1 2 3
    (integer) 3
    db01:6379> SADD set2 1 3 5 7
    (integer) 4
    2. 查看集合成员 :
      SMEMBERS set1 
    SMEMBERS set2 
    3. 查看集合的差集, 以前面一个集合为基准对比后面的,前面有,后面没有则选出来   db01:6379> SDIFF set1 set2
  1. "2"
    db01:6379> SDIFF set2 set1
  2. "7"

查看集合的交集
db01:6379> SINTER set1 set2

  1. "1"
  2. "3"
  3. "5"

查看集合的并集
db01:6379> SUNION set1 set2

  1. "1"
  2. "2"
  3. "3"
  4. "5"
  5. "7"
    db01:6379> SUNION set1 set2 set3
  6. "1"
  7. "2"
  8. "3"
  9. "5"
  10. "7"
  11. "9"
    集合不允许出现重复的值

redis 持久化

  1. RDB和AOF优缺点
    RDB : 快照 , 把当前内存里的状态快照到磁盘上
    优点 : 恢复速度快
    缺点 : 可能会丢失数据
    AOF : 类似于MySQL的binlog , 重写 ,一秒写一次
    优点 : 安全 , 有可能会丢失 1秒的数据
    缺点: 文件比较大 , 恢复速度慢
  2. 配置RDB
    配置文件里编写
    Save 900 1 900秒内出现一次变更
    Save 300 10 300秒内有10次变更
    Save 60 10000 60秒 内有1000次变更
    Dir /data /redis_6379/
    Dbfilename redis_6379.rdb
    结论 :
    1)执行shutdown的时候,内部会自动执行bgsave,然后再执行shutdown
    2)pkill kill killall 都类似于执行shutdown命令.会触发bgsave持久化
    3)恢复的时候,rdb文件名称要和配置文件里写的一样
    4)如果没有配置save参数,执行shutdown不会自动bgsave持久化
    5)如果没有配置save参数,可以手动执行bgsave触发持久化保存

常用命令 :

    ll /data/redis_6379/
cat /opt/redis_6379/conf/redis_6379.conf 
vim /opt/redis_6379/conf/redis_6379.conf 
pkill redis
redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
redis-cli -h db01
redis-cli -h db01 shutdown
bash for.sh

配置AOF

 appendfilename "redis_6379.aof"
appendonly yes
appendfsync everysec  
  1. 实验 :
    实验:
    如果aof和rdb文件同时存在,redis会如何读取:

实验步骤:
1.插入一条数据
aof: 有记录
rdb: 没有记录
2.复制到其他地方
3.把redis停掉
4.清空数据目录
5.把数据文件拷贝过来
aof: 有记录
rdb: 没有记录
6.启动redis
7.测试,如果有新插入的数据,就表示读取的是aof,如果没有,就表示读取的是rdb

实验结论:
如果2种数据格式都存在,优先读取aof

认证 :

  1. 配置文件 requirepass 123456
  2. 使用密码登录
    方法一: redis –cli –h 10.0.0.51
    AUTH 123456
    方法二 :
    Redis –cli –h –a 123456 get k1

redis 主从复制流程

  1. 主从复制命令:
    临时生效 : SLAVEOF 10.0.0.51 6379
    永久生效 : SLAVEOF 10.0.0.51 6379 写入配置文件 vim /opt/redis_6379/conf/redia_6379.conf

  2. 取消同步命令 : SLAVEOF no one

  3. 主从复制流程 : 从库发起同步请求 ----> 主库接收请求 ---> 主库开始BGSAVE ---> 从库接收主库的数据 , 清空自己的数据 , 然后将主库发送过来的PDB文件加载到内存中

从库发起同步请求

  11:55:12.686 * Connecting to MASTER 10.0.0.51:6379
 11:55:12.687 * MASTER <-> SLAVE sync started
11:55:12.687 * Non blocking connect for SYNC fired the event.
11:55:12.687 * Master replied to PING, replication can continue...
11:55:12.688 * Partial resynchronization not possible (no cached master)
11:55:12.690 * Full resync from master:c63b80909e49adfa3880dcc87ccffb89d148a564:436

主库接收请求

 11:55:12.694 * Slave 10.0.0.52:6379 asks for synchronization
11:55:12.694 * Full resync requested by slave 10.0.0.52:6379

主库开始BGSAVE

11:55:12.694 * Starting BGSAVE for SYNC with target: disk
11:55:12.695 * Background saving started by pid 13009
11:55:12.700 * DB saved on disk
11:55:12.700 * RDB: 6 MB of memory used by copy-on-write

从库接收主库的数据,清空自己的数据,然后将主库发送过来的RDB文件加载到内存中

 11:55:12.780 * MASTER <-> SLAVE sync: receiving 12887 bytes from master
 11:55:12.781 * MASTER <-> SLAVE sync: Flushing old data
 11:55:12.781 * MASTER <-> SLAVE sync: Loading DB in memory
11:55:12.782 * MASTER <-> SLAVE sync: Finished with success

主库接收从库消息,主从复制成功

11:55:12.786 * Background saving terminated with success
11:55:12.786 * Synchronization with slave 10.0.0.52:6379 succeeded

redis 主从复制部署

快速创建第二台redis节点 :

Rsync –avz  /opt/*  db02:/opt/
Rsync –avz /data   db02:/
Cd /opt/redis 
Make install 
Sed –i ‘s#51#52#g’ /opt/redis_6379/conf/redis_6379.conf
Rm –rf /data/redis_6379/*

Redis-server /opt/redis_6379/conf/redis_6379.conf

  1. 配置方法
    方法一 : 临时生效 : redis –cli –h 10.0.0.52
    SLAVEOF 10.0.0.51 6379
    方法二 : 写入配置文件
    SLAVEOF 10.0.0.51 6379 写入配置文件
  2. 主从复制流程:
    1.从节点发送同步请求到主节点
    2.主节点接收到从节点的请求之后,做了如下操作
  • 立即执行bgsave将当前内存里的数据持久化到磁盘上
  • 持久化完成之后,将rdb文件发送给从节点
    3.从节点从主节点接收到rdb文件之后,做了如下操作
  • 清空自己的数据
  • 载入从主节点接收的rdb文件到自己的内存里
  1. 后面的操作就是和主节点实时的了
  1. 取消主从复制 :
    SLAVEOF no one
    注意!!!
    1.从节点只读不可写
    2.从节点不会自动故障转移,它会一直同步主
    10.0.0.52:6379> set k1 v1
    (error) READONLY You can't write against a read only slave.
    3.主从复制故障转移需要人工介入
  • 修改代码指向REDIS的IP地址
  • 从节点需要执行SLAVEOF no one

注意!!!
1.从节点会清空自己原有的数据,如果同步的对象写错了,就会导致数据丢失

安全的操作:
1.无论是同步,无论是主节点还是从节点
2.先备份一下数据

你可能感兴趣的:(day 91 redis)