Redis搭建

 

主从复制工作原理

• 工作原理

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

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

推荐阅读更多精彩内容