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 <<EOF
       以守护进程模式启动
daemonize yes
      绑定的主机地址
bind 10.0.0.51 127.0.0.1
    监听端口
port 6379
      pid文件和log文件的保存地址
pidfile /opt/redis_6379/pid/redis_6379.pid
logfile /opt/redis_6379/logs/redis_6379.log
      设置数据库的数量,默认数据库为0
databases 16
    本地数据库的目录
dir /data/redis_6379
     指定本地持久化文件的文件名,默认是dump.rdb
dbfilename redis_6379.rdb
EOF

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.先备份一下数据

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,296评论 0 36
  • 企业级redis集群架构的特点 海量数据 高并发 高可用 要达到高可用,持久化是不可减少的,持久化主要是做灾难恢复...
    lucode阅读 2,207评论 0 7
  • 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在w...
    空语阅读 1,597评论 0 2
  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,059评论 1 51
  • 转载 Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件. ...
    大先生居然都有人用了阅读 1,148评论 0 0