redis操作/基础/配置/持久化/主从架构/集群(哨兵)

redis

监听端口: 6379/tcp

Strings: 字符串
set NX|XX

   EX:过期时间 默认秒为单位
   NX:如果key不存在,才可设置key与value
   XX:如果key存在,才可以设置key与value
  incr key (key为整数)incr 依次增加1,(转载数量+1)

del :删除key (可删除多个key)

key * :查看所有key值
    SET key value  设置k:v
    GET 获取值
    INCR 为键 key 储存的数字值加上一
    DECR  为键 key 储存的数字值减去一
    EXITS

Lists: 列表

key:[list] key 的value 是一个列表
LPUSH/RPUSH 在列表左/右插入
LPOP/RPOP 列表杀出元素
LINDEX 指明索引位置获取值
LSET 修改指定索引的值 lset key index value

创建列表 LPUSH key value 
查询list 总数量 llen key

认证实现方法:

conf 文件中 line 500
auth 密码

1).redis.conf
		requirepass PASSWORD
2).redis-cli
		AUTH PASSWORD

清空数据库:

FLUSHDB  清空当前库
FLUSHALL 清空所有库

持久化

 RDB(快照)二进制格式 默认dump.rdb 命令save保存到磁盘
 配置文件:

RDB

 stop-write-on-bgsave-error yes //进行备份快照时,发生错误停止写操作
 rdbcompression  yes //压缩文件大小 会消耗CPU
 rdbchecksum yes //启动redis时检测校验信息 会导致启动慢,但是能判断rdb文件是否有错
 dbfilename dump.rdb //定义本分名称
 dir /var/lib/redis  //默认备份文件路径,可以用 conf get dir

save 900 1  #900秒内有1个数据改变将进行数据持久化
save 300 10 #300秒内有10个数据改变进行数据持久化
save 60	 10000 #60秒内有1W个数据被改变进行数据持久化

注意所谓单线程:站在客户请求角度,只有一个线程来处理客户请求,并非做任何事都是单线程。

  1、save 或 bgsave
       同步保存,会堵塞
   2、配置文件定义策略 9000 1 
       异步保存 不会堵塞
       缺点 :在保存前出现故障,中间写入数据会丢失

AOF(添加命令类似于mysql二进制)

AOR: append only file 记录每一次写操作,至指定的文件尾部实现持久化,当redis重启时,可通过重新执行文件中的命令在内存中重建数据库,
BGREWRETEAOF: AOF文件重写
	不会读取正在使用的AOF文件,而是通过将内存中的数据以命令的方式保存到临时文件中,完成之后替换原来的AOF文件
记录每一次redis的写入 (I/O)
     redis进程处理/合并 冗余操作,由BGREWRITEAOF命令实现,但不会读取现在使用的aof。

AOF重写过程

1).redis主进程会fork出子进程
2).子进程根据redis内存中的数据创建数据库重建命令倒序于临时文件中
3).父进程继续接收client的请求,并会把这些请求中的写操作继续追加至原来的AOF文件,额外这些新的写请还会被放在一个缓冲队列中,
4)目的,当子进程重写完成,会通知父进程:父进程把缓冲中的命令写到临时文件中
5)父进程用临时文件替换老的aof文件
	
注意:持久本身不能取代备份,还应该制定备份策略,对redis数据库定期进行备份

AOF与RDB同时启用

1、bgsave和bgrewriteaof,不会同时执行,避免io操作过大,某一时刻只允许一者执行。如果bgsave执行时,用户手动bgrewriteaof,会返回ok,但是不会同时执行,bgsave结束后在执行bgrewriteaof
2、redis启动恢复数据时优先使用aof

事务:(原子性,一致性,隔离性,持久性)

通过MUTI  EXEC  WATCH等命令实现事务功能,将一个或多个命令归并为一个操作请求服务器,按顺序执行的机制,(不支持回滚)

MUTI:启动一个事务(收集命令),所有的命令不会被执行,而是放到消息队列中
EXEC:执行事务.当执行消息队列中的命令时,当有别的请求时,将不会被处理,而是在执行完消息队列中的命令后,才会处理其他请求操作
	一次性将事务中的所有操作被执行完后返回给客户端
WATH:
	乐观锁,
	在EXEC命令执行前,用于监视指定数量键,如果监视中的某任意键被修改,服务器不会执行命令,并将错误返回

Connection(连接)相关命令

127.0.0.1:6379> HELP @connection

	  AUTH password
	  summary: Authenticate to the server
	  since: 1.0.0

	  ECHO message
	  summary: Echo the given string
	  since: 1.0.0

	  PING [message]
	  summary: Ping the server
	  since: 1.0.0

	  QUIT -
	  summary: Close the connection
	  since: 1.0.0

	  SELECT index
	  summary: Change the selected database for the current connection
	  since: 1.0.0

Server相关命令

CLIENT  GETNAME
CLIENT KILL ip:port  指明ip+端口 关闭对应的客户端信息
CLIENT SET 给一个连接设定名字
	
CONFIG REWRITE  将内存中对服务器配置文件同步到配置文件中
CONFIG RESETSTAT
	
DBSIZE 查看数据库中的key有多少个
SLAVEOF host port 配置主从
SLOWLG 
SYNC 
	
	BGSAVE
	SAVE
	LASTSAVE  最后保存数据的时间

redis主从架构(实现读写分离)

概念:哨兵是一个独立的进程,主库基于pingcheck方式检查从库是否在线,如果在线直接同步数据文件致从服务器,从服务器端也可以主动发送请求到主服务端,主库启动持久化功能,会不断的同步数据到磁盘上,主库一旦收到从库的同步请求,主库会将内存中的数据同步给从库,从库收到数据以后保存到磁盘,然后加载到内存完成数据重建,链式复制(一主多从)同步也如此,因为主是不区分正真的主,还是另外一个从

特点

1、一个master可以有多个slave
2、支持链式复制(一个slave也可以是其他slave的slave)
3、Master以非阻塞方式同步数据致slave,(master可以同时处理多个slave的读写请求,slave端在同步数据时也可以使用非阻塞方式)

主从配置 - 启动方式:

slave端:slavaof master_ip master_port这样这个就成了主库
用info查看

sentinal(哨兵)

Redis配置哨兵模式

在这里插入图片描述
在这里插入图片描述

首先配置Redis的主从服务器,修改redis.conf文件如下

管理多个redis服务实现HA(高可用)
监控多个redis服务节点
# 使得Redis服务器可以跨网络访问
bind 0.0.0.0
# 设置密码
requirepass "123456"
# 指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
slaveof 192.168.11.128 6379
# 主服务器密码,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
masterauth 123456

配置3个哨兵,每个哨兵的配置都是一样的。在Redis安装目录下有一个sentinel.conf文件,copy一份进行修改

# 禁止保护模式
protected-mode no
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.11.128代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.11.128 6379 2
# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456

进入Redis的安装目录的src目录,通过下面的命令启动服务器和哨兵

# 启动Redis服务器进程
./redis-server ../redis.conf
# 启动哨兵进程
./redis-sentinel ../sentinel.conf

哨兵模式的其他配置项
在这里插入图片描述

自动故障转移

sentinel 也是一个分布式系统,可以在架构中运行多个sentinel进程,多个进程之间使用“流言协议”,接收redis主节点是否离线,
并使用“投票协议”是否实现故障转移,选择哪一个redis的从服务器成为主服务器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章