redis

redis 是一个用c语言编写的高性能k/v存储数据库,支持持久存储,是非关系型数据库。redis默认使用TCP的6379端口监听请求,单进程的模型。

配置文件

redis配置文件为/etc/redis.conf,下面我们挑出一些经常需要配置的参数来看看:
1.INCLUDES段
include :跟文件或者路径,表示配置文件包含的子配置文件
2.NETWORK段,网络相关设置
bind :跟ip地址,表示次服务通过哪个网卡监听请求,写0.0.0.0表示监听本机所有地址,默认为127.0.0.1
protected-mode :保护模式,默认为yes,开启后如果没有设置requirepass项目和bind仍然是默认的127.0.0.1,就进入了保护模式,只能从本地进行连接
port :监听的端口,默认为6379
tcp-backlog 511:后援队列长度,此处默认为511,就是达到最大负载时,允许多少请求可以处于等待状态
timeout 0:客户端连接空闲的超时时长,就是客户端多久没有操作,服务端就会自动断开,默认为0表示不断开
tcp-keepalive 300:tcp的持久连接,用来实现复用的,三次握手建立连接后在多少时间之内可以一直使用这个连接。
3.SECURITY段,安全相关的配置
requirepass :设置密码认证,默认注释,设置密码直接跟在后边就行,不过这个密码是明文的,所以要注意配置文件不能被不想关的人读取
rename-command CONFIG "":用来给命令设置别名的,CONFIG命令可以直接设置各项参数,可以查看,所以为了安全可以将命令设置为别的名字
4.LIMITS段,设置限制
maxclients 10000:最大并发连接
maxmemory <bytes>:最大使用的内存空间,不限制就默认能用多少用多少
maxmemory-policy noeviction:内存空间满时的处理策略,有以下几种:

  • volatile-lru:在拥有过期时间的键中,使用LRU方式淘汰
  • allkeys-lru:全部键使用LRU方式淘汰
  • volatile-random:拥有过期时间的键中随机淘汰
  • allkeys-random:全部键随机淘汰
  • volatile-ttl:按生命周期所剩时间进行淘汰
  • noeviction:不淘汰,要将redis作为存储时可以使用这一项,做缓存时别用这一项
    maxmemory-samples 5:每一批选出几个样本,再去按照上面的策略进行淘汰,默认为5

此外,redis参数支持运行时修改,使用CONFIG命令可以在交互界面中修改参数:
1.CONFIG GET:后边跟参数名,可以获取参数当前的设置信息
2.CONFIG SET:后边跟参数名=值,设定参数的值
3.REWRITE:将设定成功的参数同步到配置文件中,如果之前这个参数有值,会覆盖之前的值
4.RESET STAT:重置计数器

redis持久机制

redis是一种内存型数据库,而他支持的持久存储是通过将数据备份到磁盘上的方式实现的,这个存储方式有两种:
1.RDB方式:就是snapshotting(快照)的方式,这种方式是redis的默认机制,特点是高效但数据容易丢失。在程序交互界面中使用两个命令可以实现这个种机制

  • SAVE命令:主进程往磁盘中写入快照,此时redis服务由于主进程被占用,其他什么事都做不了了
  • BGSAVE命令:开子进程在后台执行写入快照,主程序能继续提供服务

下面是配置文件中对应这种方式的配置项,放在SNAPSHOTTING段中
save 900 1
save 300 10
save 60 10000:这三段的意思就是在多久的时间内,变化的键达到多少次就执行快照,第一个参数为时间,第二个参数为次数,用这三段即达到长时间变化少时快照,也能达到短时间内变化量很大时去快照的效果
stop-writes-on-bgsave-error yes:快照失败时拒绝写入,与其丢失数据,不如先拒绝提供服务的好,yes为开启
rdbcompression yes:快照要不要压缩,yes为压缩,这个就看时磁盘空间开销大还是cpu开销大了,视情况而定
rdbchecksum yes:快照做完要不要校验,这个还是有必要的
dbfilename dump.rdb:快照名字,默认为dump.rdb
dir /var/lib/redis:快照存放路径,默认为/var/lib/redis

2.AOF方式:就是用追加的方式,类似于mysql的二进制日志方式,BGREWRITEAOF命令为执行AOF方式的备份,这个方式的机制为AOF文件重写,他会直接读取内存,将多次执行的命令转换为一个简单实现结果的命令,再去存入磁盘,比如让一个数自增1000次,挺麻烦,而结果却是一个简单的数字,这时就将这个自增1000次的指令,重写成直接生成这个数字的命令,在重放时会大大缩短执行时间。
下面为AOF的相关配置,在配置文件中的APPEND ONLY MODE段
appendonly no:AOF功能默认时关闭的,要使用时改为yes即可
appendfilename "appendonly.aof":快照名,存放的位置是在SNAPSHOTTING段中的dir定义的
appendfsync always|everysec|no:每次执行追加的时间,always表示有改变就去同步到磁盘,everysec表示每秒钟保存一次,no表示内核决定什么时候保存
no-appendfsync-on-rewrite no:在rewrite时不同步,no为同步,yes为不同步,同步会增加写入操作,因为rewrite完之后还得再次去同步,但是不同步万一数据丢失了就不太好了,所以为了数据安全还是最好将这项目设定为no
auto-aof-rewrite-percentage 100:100表示百分之百,就是变化量达到元数据的百分之百时自动同步
auto-aof-rewrite-min-size 64mb:上面这个设定有个弊端就是当数据量很小时候变化量很容易达到100,所以同步的频率会很高,但是没有这个必要,所以这条加个限定就是当数据量小于64m时不去同步,两个条件一起满足才会去同步

redis的主从

redis也可以像mysql一样实现主从,过程相对于Mysql来说更加简单,步骤如下:
1.环境:

  • 时间同步,关闭selinux和firewalld
  • 主节点:172.16.200.108,使用centos7.3系统,redis-3.2.3
  • 从节点1:172.16.200.109,其他同上
  • 从节点2:172.16.200.120,同上
  • 从节点3:172.16.200.107,同上
    2.在主节点上设置认证
[root@localhost ~]# vim /etc/redis.conf
bind 0.0.0.0
[root@localhost ~]# service redis start
[root@localhost ~]# redis-cli
127.0.0.1:6379> CONFIG SET requirepass "123"
127.0.0.1:6379> CONFIG REWRITE

3.在几个从节点上添加主节点

[root@localhost ~]# vim /etc/redis.conf
bind 0.0.0.0
[root@localhost ~]# service redis start
[root@localhost ~]# redis-cli
127.0.0.1:6379> CONFIG SET masterauth 123
127.0.0.1:6379> CONFIG REWRITE
OK

4.验证
在主节点上执行info replication命令,查看复制集群状态

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=172.16.200.107,port=6379,state=online,offset=365,lag=1
slave0:ip=172.16.200.120,port=6379,state=online,offset=365,lag=1
slave1:ip=172.16.200.109,port=6379,state=online,offset=365,lag=1
master_repl_offset:365
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:364

可以看到,此节点为主,三个从节点的信息都显示的很清楚,证明配置成功了。
我们来看下配置文件中关于主从的配置,在REPLICATION段中
slave-serve-stale-data yes:表示当主节点宕机时,从节点的数据还能不能继续提供服务
slave-read-only yes:从节点只读
repl-diskless-sync no:是否做基于磁盘的同步,yes为无磁盘复制,内存中将数据构建好就直接可以同步给从了,不需要像保存到磁盘中
repl-diskless-sync-delay 5:延迟5秒凑够一波数据后在发送给从
slave-priority 100:表示当前从节点的优先级,这个优先级用于主节点宕机时,对比别的从节点,谁的优先级高谁就成为主节点,优先级数字越小越高,0表示不能当主节点。
min-slaves-to-write 3:至少有三个从节点在线才允许主节点写入
min-slaves-max-lag 10:落后10秒的从节点不算做一个在线的从节点,对应上面这条配置,这两条默认是注释的,所以不必在意从节点会少于3个
slave-announce-ip 5.5.5.5和slave-announce-port 1234:表示集群中向别的节点发送数据时候使用的ip和端口,这两条默认是注释的,所以系统自动选择使用哪个ip和端口。

redis高可用

redis主节点高可用服务有自带的,叫做redis-sentinel,他的配置文件为/etc/redis-sentinel.conf ,这个配置文件会根据集群的环境自动修改,不过一些参数还是要配置的。当主节点宕机时,会自动我们需要在每个节点上配置好,然后启用redis-sentinel服务。
步骤
1.环境,还是刚才的主从环境
2.在每个节点上配置/etc/redis-sentinel.conf,大致需要配置的选项都写在了下边:

  • bind 0.0.0.0 :这个默认没有,但是不写的话会自动启用安全机制,限制互相之间的通信,所以将他写在prot选项下面就行,这里就奔放的写0.0.0.0了
  • sentinel monitor mymaster 172.16.200.108 6379 2 :设置监控的集群名字叫mymaster,然后主节点的ip和端口,2表示有几个从节点同意一个从节点可以成为主节点,这个节点才能成功成为主节点。
  • sentinel auth-pass mymaster 123 :设置监控集群的密码
  • sentinel down-after-milliseconds mymaster 50 :主观down,就是这个节点多久没有收到一个另一个节点的消息,就认为他宕了
  • sentinel parallel-syncs mymaster 1:并行同步的从节点个数,设置高了
  • sentinel failover-timeout mymaster 180000:故障转移多少时间没成功,就去开始下一轮转移
  • sentinel notification-script <master-name> <script-path>:通知脚本设置,当有节点宕掉时,通过什么方式通知管理员,可以时邮件短信等方式,这里就不设置了
  • logfile /var/log/redis/sentinel.log:日志位置
    3.每个节点都启动redis-sentinel
[root@localhost ~]# service redis-sentinel start
[root@localhost ~]# ss -tnl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port           
   LISTEN     0      128             *:26379                       *:*                  
LISTEN     0      128     127.0.0.1:6379                        *:*    

此时,我们看到redis的6379端口和sentinel的26379端口都已经启动了。
4.验证
我们可以使用redis-cli -h 26379 去连上sentinel管理端口去查看当前的信息,有如下几个命令:
SENTINEL masters:查看当前主节点信息
SENTINEL slaves <MASTER_NAME>:查看当前集群名称中从节点的信息
SENTINEL failover <MASTER_NAME>:手动切换集群的主节点
SENTINEL get-master-addr-by-name <MASTER_NAME>:
所以我们从主节点登陆上去验证以下:

[root@localhost etc]# redis-cli -p 26379
127.0.0.1:26379> sentinel masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "172.16.200.108"
    5) "port"
    6) "6379"
...

从显示信息可以看出来,现在只有一个集群(因为只有一个1))当前的主节点为172.16.200.108,集群名字叫做mymaster,还有很多信息这里就不显示了
查看从节点信息:

127.0.0.1:26379> sentinel slaves mymaster
1)  1) "name"
    2) "172.16.200.120:6379"
    3) "ip"
    4) "172.16.200.120"
...
2)  1) "name"
    2) "172.16.200.109:6379"
    3) "ip"
    4) "172.16.200.109"

可以看到当前从节点有三个,各自的信息都列了出来
我们还可以手动切换主节点

127.0.0.1:26379> sentinel failover mymaster
OK
127.0.0.1:26379> sentinel masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "172.16.200.109"
    5) "port"
    6) "6379"
...
127.0.0.1:26379> sentinel slaves mymaster
1)  1) "name"
    2) "172.16.200.108:6379"
    3) "ip"
    4) "172.16.200.108"

切换完成后我们看到当前的主节点变成172.16.200.109了,而之前的主节点变为从节点了。
5.模拟故障
当前的主节点为172.16.200.109,我们将之上的redis服务手动关闭,然后查看高可用系统的处理情况:
在172.16.200.109上,关闭redis

[root@localhost ~]# service redis stop

然后查看当前集群主节点

127.0.0.1:26379> sentinel masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "172.16.200.107"

我们看到主节点已经变成200.107了,再次重启手动宕掉的节点,查看从节点

127.0.0.1:26379> sentinel slaves mymaster
1)  1) "name"
    2) "172.16.200.109:6379"
    3) "ip"
    4) "172.16.200.109"
    5) "port"
    6) "6379"
    7) "runid"
...

看到之前宕机的109节点上线后变为从节点继续运行了,工作一切正常,实验成功!@=

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

推荐阅读更多精彩内容

  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,030评论 1 51
  • redis简介 redis单纯程模型,支持主从模式,提高可用性,是一个开源项目,经常用来当一个数据结构服务器。其是...
    魏镇坪阅读 60,546评论 2 4
  • 一.redis介绍 (1)概念:属于非关系型存储数据库——基于kv(键值存储)的开源的内存存储,数据库结构存储。经...
    楠人帮阅读 698评论 0 6
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,116评论 24 626
  • 小说开始,许三观以虎头虎脑涉世未深的形象展开,从那两位卖血的老手以为谁能稀释血,可以多点血狂灌水,似乎看到三位的结...
    思享窝阅读 402评论 0 0