Redis搭建

2019-05-06  本文已影响0人  就是这么任性_ac9c

 

主从复制工作原理

• 工作原理

– 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 的数据类型

上一篇下一篇

猜你喜欢

热点阅读