美文网首页
Redis搭建

Redis搭建

作者: 就是这么任性_ac9c | 来源:发表于2019-05-06 09:51 被阅读0次

     

    主从复制工作原理

    • 工作原理

    – Slave 向 maste 发送 sync 命令

    – Master 启动后台存盘进程,同时收集所有修改数据命

    – Master 执行完后台存盘进程后,传送整个数据文件到

    slave 。

    – Slave 接收数据文件后,将其存盘并加载到内存中完成

    首次完全同步

    – 后续有新数据产生时, master 继续将新的所以收集到

    的修改命令依次传给 slave ,完成同步。

    一主一从:50主 57从(因为每台redis服务器默认自己都为master,所以只需配置57)

    [root@redis52 ~]# redis-cli -h 192.168.4.50

    192.168.4.52:6379> info replication // 查看主从配置信息

    命令:  info replication //查看主从配置信息

    命令行快速指定从库(重起失效)

    命令: slaveof 主库ip 主库端口

    192.168.4.57:6357> slaveof 192.168.4.50 6350

    OK

    57查看

    192.168.4.57:6357> info replication

    # Replication

    role:slave

    master_host:192.168.4.50

    master_port:6350

    50查看

    192.168.4.50:6350> info replication

    # Replication

    role:master

    connected_slaves:1   ###连接一个从库

    要57恢复为单独服务器只需停掉重起(因为是命令行设置的)

    主从从

    再把58设为57从:

    192.168.4.58:6358> keys *

    (empty list or set)

    192.168.4.58:6358> slaveof 192.168.4.57 6357

    OK

    192.168.4.58:6358> keys *

    1) "name"

    192.168.4.57:6357> slaveof no one

    OK

    192.168.4.57:6357> info replication

    # Replication

    role:master

    connected_slaves:1

    恢复为主库:

    192.168.4.57:6357> slaveof no one

    OK

    192.168.4.57:6357> info replication

    # Replication

    role:master

    connected_slaves:1

    修改配置文件配置永久主从且带认证(密码):

    配置50密码登陆,且设置脚本起停

    [root@host50 ~]# redis-cli -h 192.168.4.50 -p 6350

    192.168.4.50:6350> ping

    (error) NOAUTH Authentication required.

    192.168.4.50:6350> auth 123456

    OK

    或者[root@host50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456

    修改57主配置文件

    [root@host57 ~]# vim /etc/redis/6379.conf

    282  slaveof 192.168.4.50 6350  ####主库ip 端口

     283

     284 # If the master is passwordprotected (using the "requirepass" configuratio     n

     285 # directive below) it ispossible to tell the slave to authenticate before

     286 # starting the replicationsynchronization process, otherwise the master wi     ll

     287 # refuse the slave request.

     288 #

     289 masterauth 123456  ####主库密码

     290

    重起57登陆:

    [root@host57 ~]# redis-cli -h 192.168.4.57 -p 6357

    192.168.4.57:6357> info replication

    # Replication

    role:slave

    master_host:192.168.4.50

    master_port:6350

    master_link_status:up

    修改配置文件把58设置为57从:

    [root@host58 6379]# vim /etc/redis/6379.conf

     281 #

     282 slaveof 192.168.4.57 6357

     283

     284 # If the master is passwordprotected (using the "requirepass" configuratio     n

    58查看

    192.168.4.58:6358> info replication

    # Replication

    role:slave

    master_host:192.168.4.57

    master_port:6357

    master_link_status:up

    哨兵模式

    主库宕机后,从库自动升级为主库

    在 slave 主机编辑 sentinel.conf 文件

    在 slave 主机运行哨兵程序

    ####手写哨兵配置文件(必须这个路径这个名)

             ####vim /etc/sentinel.conf

    [root@host57 ~]# cat /etc/sentinel.conf

    sentinel monitor redis50 192.168.4.50 6350 1

    需把前面设置的50密码注释掉,并把57设置的50密码注释掉

    如果不注释密码,50有密码设置/etc/sentinel.conf需加主库密码

    sentinel monitor redis50 192.168.4.50 6350 1

    sentinel auth_pass mymaster 123456

    测试:

    1)[root@host57 ~]#redis-sentinel /etc/sentinel.conf 启动哨兵设置,读配置文件

    2)手动down掉50

    3)在57查看状态是否变为主库

    192.168.4.57:6357> info replication

    # Replication

    role:master

    connected_slaves:1

    slave0:ip=192.168.4.58,port=6358,state=online,offset=7088,lag=0

    sentinel monitor 主机名 ip 地址 端口 票数

    主机名:自定义

    IP 地址: master 主机的 IP 地址

    端 口: master 主机 redis 服务使用的端口

    票 数:主库宕机后, 票数大于 1 的主机被升级为主库

    RDB 持久化介绍

    数据持久化方式之一

    – 在指定时间间隔内,将内存中的数据集快照写入硬盘。

    – 术语叫 Snapshot 快照。

    – 恢复时,将快照文件直接读到内存里。

    相关配置参数

    • 文件名

    – dbfilename “dump.rdb” // 文件名

    – save “”  //禁用RDB

    • 数据从内存保存到硬盘的频率

    – save 900 1  // 900秒内且有 1 次修改存盘

    – save 300 10

    – save 60 10000

    //300 秒内且有 10 次修改存盘

    //60 秒内且有 10000 修改存盘

    • 手动立刻存盘

    – > save    //阻塞写存盘

    – > bgsave // 不阻塞写存盘

    数据恢复:

    1)[root@host58 6379]# pwd

    /var/lib/redis/6379

    [root@host58 6379]# cp dump.rdb dump.rdb.bak

    要确定数据已经存入dump.rdb

    2)关闭58redis(切忌一定要先关服务)

    cp dump.rdb.bak dump.rdb

    如果先cp dump.rdb.bak dump.rdb后关服务,dump.rdb.bak数据没拷贝到dump.rdb中去,因为关服务是会自动生成一个dump.rdb文件,会覆盖你已经拷贝过dump.rdb.bak的dump.rdb的内容,因为名字一样

    3)起redis服务,查看数据恢复

    因为起redis服务,redis会读取dump.rdb中的内容,dump.rdb中是dunm.rdb.bak中备份数据

    RDB 优点 / 缺点

    • RDB 优点

    – 持久化时, Redis 服务会创建一个子进程来进行持久

    化,会先将数据写入到一个临时文件中,待持久化过

    程都结束了,再用这个临时文件替换上次持久化好的

    文件;整个过程中主进程不做任何 IO 操作,这就确保

    了极高的性能。

    – 如果要进程大规模数据恢复,且对数据完整行要求不

    是非常高,使用 RDB 比 AOF 更高效。

    • RDB 的缺点

    – 意外宕机,最后一次持久化的数据会丢失。

    持久化之AOF

    AOF 介绍

    • 只追加操作的文件

    – Append Only File

    – 记录 redis 服务所有写操作。

    – 不断的将新的写操作,追加到文件的末尾。

    – 使用 cat 命令可以查看文件内容

    相关配置参数

    • 文件名

    – appendfilename "appendonly.aof" // 文件名

    – appendonly yes // 启用 aof ,默认no  ####启用AOF

    • AOF 文件记录,写操作的三种方式

    – appendfsync always // 有新的写操作立即记录,

    性能差,完整性好。

    – appendfsync everysec // 每秒记录一次,宕机时会

    丢失 1 秒的数据

    – appendfsync no

    // 从不记录

    修复 AOF 文件,

    – 把文件恢复到最后一次的正确操作

    [root@redis53 6379]# redis-check-aof --fix appendonly.aof

    AOF数据恢复

    [root@host58 6379]# cp appendonly.aof.bak appendonly.aof 如果里面有flushall删除就可以了

    日志重写 ( 日志文件会不断增大 ) ,何时会触发日志重写?

    – redis 会记录上次重写时 AOF 文件的大小,默认配置

    是当 aof 文件是上次 rewrite 后大小的 1 倍且文件大于

    64M 时触发。

    – auto-aof-rewrite-percentage 100

    – auto-aof-rewrite-min-size 64mb

    字符串操作

    set key value [ex seconds] [px milliseconds] [nx|xx]

    – 设置 key 及值,过期时间可以设置为秒或毫秒为单位

    – nx 只有 key 不存在,才对 key 进行操作

    – xx 只有 key 已存在,才对 key 进行操作

    setrange key offset value

    – 从偏移量开始复写 key 的特定位的值

    192.168.4.58:6358> set tel 18780123904

    OK

    192.168.4.58:6358> SETRANGE tel 3 ****

    (integer) 11

    192.168.4.58:6358> get tel

    "187****3904"

    • strlen key

    – 统计字串长度

    192.168.4.58:6358> STRLEN tel

    (integer) 11

    append key value

    – 字符存在则追加,不存在则创建 key 及value

    – 返回值为 key 的长度

    192.168.4.58:6358> APPEND tel xielingyun

    (integer) 21

    192.168.4.58:6358> get tel

    "187****3904xielingyun"

    bitcount key

    92.168.4.58:6358> set youxi 1 0

    (error) ERR syntax error

    192.168.4.58:6358> SETBIT youxi 1 0

    (integer) 0

    192.168.4.58:6358> SETBIT youxi 2 1

    (integer) 0

    192.168.4.58:6358> SETBIT youxi 3 1

    (integer) 0

    192.168.4.58:6358> SETBIT youxi 4 1

    (integer) 0

    192.168.4.58:6358> SETBIT youxi 5 1

    (integer) 0

    192.168.4.58:6358> SETBIT youxi 6 0

    (integer) 0

    192.168.4.58:6358> BITCOUNT youxi 统计

    (integer) 4

    192.168.4.58:6358> SETBIT youxi 2 0 修改

    (integer) 1

    192.168.4.58:6358> BITCOUNT youxi 统计

    (integer) 3

    decr key

    – 将 key 中的值减 1 , key 不存在则先初始化为 0 ,再减1

    192.168.4.58:6358> set z 9

    OK

    192.168.4.58:6358> DECR z

    (integer) 8

    192.168.4.58:6358> DECR z

    (integer) 7

    decrby key decrement

    – 将 key 中的值,减去decrement

    192.168.4.58:6358> DECRBY z 4

    (integer) 3

    192.168.4.58:6358> DECRBY z 3

    (integer) 0

    getrange key start end

    负数偏移量表述从末尾计数, -1 表示最后一个字符

    -2表示倒数第二个字符

    192.168.4.58:6358> get tel

    "187****3904xielingyun"

    192.168.4.58:6358> GETRANGE tel 0 4

    "187**"

    192.168.4.58:6358> GETRANGE tel 1 5

    "87***"

    192.168.4.58:6358> GETRANGE tel 1 7

    "87****3"

    192.168.4.58:6358> GETRANGE tel -4 -1

    "gyun

    incr key

    – 将 key 的值加 1 ,如果 key 不存在,则初始为 0 后再加1

    192.168.4.58:6358> set num 100

    OK

    192.168.4.58:6358> INCR num

    (integer) 101

    192.168.4.58:6358> INCR num

    (integer) 102

    192.168.4.58:6358> INCR num

    (integer) 103

    incrby key increment

    – 将 key 的值增加increment

    192.168.4.58:6358> INCRby num 5

    (integer) 108

    192.168.4.58:6358> INCRby num 5

    (integer) 113

    incrbyfloat key increment

    – 为 key 中所储存的值加上浮点数增量increment

    192.168.4.58:6358> INCRBYFLOAT num 0.5

    "113.5"

    192.168.4.58:6358> INCRBYFLOAT num 0.5

    "114"

    192.168.4.58:6358> INCRBYFLOAT num 0.5

    "114.5"

    mget key [key...]

     一次获取一个或多个 key 的值,空格分隔, < 具有原子性

    192.168.4.58:6358> mget youxi num z

    1) "\x1c"

    2) "114.5"

    3) "0"

    mset key value [key value ...]

    – 一次设置多个 key 及值,空格分隔, < 具有原子性>

    192.168.4.58:6358> mset b 1 c 2

    OK

    192.168.4.58:6358> get b

    "1"

    192.168.4.58:6358> get c

    "2"

    List 列表简介

    • Redis 的 list 是一个字符队列

    • 先进后出

    • 一个 key 可以有多个值

    lpush key value [value...]

    – 将一个或多个值 value 插入到列表 key 的表头

    – Key 不存在,则创建key

    >lpush list a b c //list1 值依次为c b a

    等同于lpush list a; lpush list b; lpush list c

    192.168.4.58:6358> LPUSH name bob lucy jerry tom

    (integer) 4

    192.168.4.58:6358> type name

    list

    192.168.4.58:6358> LRANGE name 0 2

    1) "tom"

    2) "jerry"

    3) "lucy"

    lrange key start stop

    – 从开始位置读取 key 的值到 stop 结束

    >lrange list 0 2   //从 0 位开始,读到 2 位为止

    >lrange list 0 -1   //从开始读到结束为止

    >lrange list 0 -2   //从开始读到倒数第 2 位值

    192.168.4.58:6358> LRANGE name 0 -1

    1) "tom"

    2) "jerry"

    3) "lucy"

    4) "bob"

    pop key

    – 移除并返回列表头元素数据, key 不存在则返回nil

    >lpop list // 删除表头元素,可以多次执行

    192.168.4.58:6358> lpop name

    "tom"

    192.168.4.58:6358> LRANGE name 0 -1

    1) "jerry"

    2) "lucy"

    3) "bob"

    192.168.4.58:6358> LLEN name

    (integer) 3

    lindex key index

    – 返回列表中第 index 个值

    如lindex key 0 ; lindex key 2; lindex key -2

    192.168.4.58:6358> LINDEX name 0

    "jerry"

    192.168.4.58:6358> LINDEX name 1

    "lucy"

    192.168.4.58:6358> LINDEX name 2

    "bob"

    192.168.4.58:6358> LINDEX name -1

    "bob"

    192.168.4.58:6358> LINDEX name -2

    "lucy"

    lset key index value

    – 将 key 中 index 位置的值修改为value

    >lset list 3 test

    // 将 list 中第 3 个值修改为test

    192.168.4.58:6358> lset name 0 abc

    OK

    192.168.4.58:6358> LRANGE name 0 -1

    1) "abc"

    2) "lucy"

    3) "bob"

    192.168.4.58:6358> LSET name 1 bcd

    OK

    192.168.4.58:6358> LRANGE name 0 -1

    1) "abc"

    2) "bcd"

    3) "bob"

    rpush key value [value...]

    – 将 value 插入到 key 的末尾

    >rpush list3 a b c

    >rpush list3 d

    //list3 值为a b c   //末尾插入d

    192.168.4.58:6358> RPUSH name lbj

    (integer) 4

    192.168.4.58:6358> LRANGE name 0 -1

    1) "abc"

    2) "bcd"

    3) "bob"

    4) "lbj"

    rpop key

    – 删除并返回 key 末尾的值

    192.168.4.58:6358> LRANGE name 0 -1

    1) "abc"

    2) "bcd"

    3) "bob"

    Hash 表

    让定义变量可以存储多个key/values key/values

    hset key field value

    – 将 hash 表中 field 值设置为value

    192.168.4.58:6358> hset site google 'www.google'

    (integer) 1

    192.168.4.58:6358> hset site baidu 'www.baidu'

    (integer) 1

    192.168.4.58:6358> TYPE site

    hash

    192.168.4.58:6358> hset site sina www.sina

    (integer) 1

    hget key filed

    – 获取 hash 表中 field 的值

    192.168.4.58:6358> HGET site sina

    "www.sina"

    hmset key field value [field value...]

    – 同时给 hash 表中的多个 field 赋值

    192.168.4.58:6358> HMSET site yahoo www.yahoo.com qq www.qq.com

    OK

    192.168.4.58:6358> HGET site qq

    "www.qq.com"

    hmget key field [field...]

    – 返回 hash 表中多个 field 的值

    192.168.4.58:6358> HMgET site yahoo qq baidu

    1) "www.yahoo.com"

    2) "www.qq.com"

    3) "www.baidu"

    hkeys key

    – 返回 hash 表中所有 field 名称

    192.168.4.58:6358> hkeys site

    1) "google"

    2) "baidu"

    3) "sina"

    4) "yahoo"

    5) "qq"

    hgetall key

    – 返回 hash 表中所有 field 和field的值

    192.168.4.58:6358> HGETALL site

     1) "google"

     2) "www.google"

     3) "baidu"

     4) "www.baidu"

     5) "sina"

     6) "www.sina"

     7) "yahoo"

     8) "www.yahoo.com"

     9) "qq"

    10) "www.qq.com"

    hvals key

    – 返回 hash 表中所有 filed 的值

    192.168.4.58:6358> HVALS site

    1) "www.google"

    2) "www.baidu"

    3) "www.sina"

    4) "www.yahoo.com"

    5) "www.qq.com"

    hdel key field [field...]

    – 删除 hash 表中多个 field 的值,不存在则忽略

    192.168.4.58:6358> HDEL site qq baidu

    1) "google"

    2) "www.google"

    3) "sina"

    4) "www.sina"

    5) "yahoo"

    6) "www.yahoo.com"

    del key [key...]

    – 删除一个或多个key

    • exists key

    – 测试一个 key 是否存在

    • expire key seconds

    – 设置 key 的生存周期

    • persist key

    – 设置 key 永不过期

    • ttl key

    – 查看 key 的生存周期

    keys 匹配

    – 找符合匹配条件的 key ,特殊符号用 \ 屏蔽

    >keys *

    // 显示所有key

    >keys h?llo // 匹配 hello,hallo,hxllo 等

    >keys h*llo // 匹配 hllo 或 heeello 等

    >keys h[ae]lo // 匹配 hello 和hallo

    flushall

    – 清空所有数据

    • select id

    – 选择数据库, id 用数字指定,默认数据库为0

    >select 0

    >select 2

    move key db_id

    – 将当前数据库的 key 移动到 db_id 数据库中

    >move key 1

    // 将 key 移动到 1 数据库中

    • rename key newkey

    – 给 key 改名为 newkey , newkey 已存在时,则覆盖

    其值

    • renamenx key newkey

    – 仅当 newkey 不存在时,才将 key 改名为newkey

    • sort key

    – 对 key 进行排序

    >lpush cost 1 8 7 2 5

    >sort cost

    // 默认对数字排序,升序

    >sort cost desc

    // 降序

    >lpush test “about” “site” “rename”

    >sort test alpha

    // 对字符排序

    >sort cost alpha limit 0 3

    // 排序后提取 0-3 位数据

    >sort cost alpha limit 0 3 desc

    >sort cost STORE cost2 // 对 cost 排序并保存为cost2

    type key

    – 返回 key 的数据类型

    相关文章

      网友评论

          本文标题:Redis搭建

          本文链接:https://www.haomeiwen.com/subject/xugloqtx.html