redis

一,常见非关系数据库和sql

关系型数据库 mysql oracle
非关系型数据库mongodb redis

二, redis重要特性

1.速度快,源码少,不依赖操作系统中的类库

redis 所有的数据都存放在内存中
redis 使用c语言实现
redis 使用单线程架构

2.基于键值对的数据结构服务器
  物种数据结构:
       字符串:  设置一个key mset k1 2 k2 3 k4 4 MSET,MGET
       哈希:由键值对组成 HMSET指令设置hash中的多个域
  **生成一个hash类型:**
  HMSET user:1 name xiaozhang job it age 28
  HMSET user:2 name abc job it age 28
  HMSET user:3 name def job it age 28
  **查看hash里的多个值**
  HMGET user:1 name age job
  **查看hash里的所有的值**
  HGETALL user:1
  **mysql数据和redis哈希对比:**
  user表
  uid  name         job  age 
  1  xiaozhang  it   28 
  2  xiaoya     it   28 
  3  yazhang    it   28 
  **redis缓存mysql数据**
  名字  key1 k1值 key2 k2的值 key3 k3的值
  uid:1 name xiaozahng job it age 28
  uid:2 name xiaoya job it age 28
  uid:3 name yazahng job it age 28
   列表
   集合
   有序集合
3.丰富的功能

提供键过期功能,可以实现缓存。使用单线程模型,服务端处理模型简单。客户端语言多,java,PHP,python,C, Nodejs等

4. redis支持数据的持久化

实现把所有数据存放在内存中RDB和AOF

5. redis的主从复制和高可用

哨兵 redis-sentinel
集群 redis-cluster

三 redis的应用场景

  1. 缓存过期时间,就是设置k值过期 expire k1 100 设置100秒过期
  persist k1 取消过期时间
      缓存session会话
      缓存用户信息,找不到再去mysql查,查到然后回写到redis  
      优惠卷过期时间
  2. 排行榜-列表&有序集合
     热度排行榜
     发布时间排行榜
  3. 计数器天然支持计数器  INCR K1(加1)INCRBY K1 10(加10)
      如 帖子浏览数
      视频播放次数
      商品浏览数
  4. 社交网络-集合
  5. 消息列队系统-发布订阅
      配合ELK实现日志收集

四 redis持久化

总所周知redis是内存数据库,当redis所在服务器宕机所以数据就会丢失,为解决这个问题 redis 用rdb 和aof来解决
牛逼持久化链接 https://www.shuzhiduo.com/A/amd0oNam5g/
用RDB和AOF实现
RDB:实现快照功能,把当前内存里的状态快照到磁盘上
优点,恢复速度快
缺点:可能会丢失数据
AOF:类似与mysql的binlog,重写 一秒一次
优点,安全,有可能丢失一秒的数据
缺点,文件比较大,恢复速度慢
当插入一个新K时会1秒后先触发aof文件记录内容,故当rdb和aof文件同时存在时 优先读取aof文件。

  RDB的配置文件配置持久化参数
  save 900 1
  save 300 10
  save 60 10000    60秒发生一万次K的该变就会触发将数据写入到磁盘
  dir /data/redis_6379/
  dbfilename redis_6379.rdb
  结论:
  1.执行shutdown的时候,内部会自动执行bgsave,然后再执行      shutdown
  2.pkill kill killall 都类似于执行shutdown命令.会触发bgsave持久化
  3.恢复的时候,rdb文件名称要和配置文件里写的一样
  4.如果没有配置save参数,执行shutdown不会自动bgsave持久化 
  5.如果没有配置save参数,可以手动执行bgsave触发持久化保存
  五,redis的高可用原理
  建立主从,在redis服务器上设置哨兵监控主从状态实时进    行故障转移。当主故障库修复后,如果想恢复主库的地位,需要手动设置权重为0,然后重建手动改变
  10.模拟权重选举
  - 设置其他节点的权重为0
  - 手动发起重新选举
  - 观察所有节点消息是否同步
  - 观察切换结果是否符合预期
  命令解释:
  1.查询命令:CONFIG GET slave-priority
  2.设置命令:CONFIG SET slave-priority 0
  3.主动切换:sentinel failover mymaster
  操作命令:
  redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0
  redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0
  redis-cli -h db01 -p 26379 sentinel failover mymaster
  验证选举结果:
  redis-cli -h db01 -p 26379 Sentinel get-master-addr-by-name mymaster
  恢复DB01主哨兵后 恢复正常的优先级
  redis-cli -h db02 -p 6379 CONFIG SET slave-priority 100
  redis-cli -h db03 -p 6379 CONFIG SET slave-priority 100

五,redis的主从复制高可用

redis的主从复制,时在分布式系统中解决单点问题,通常会将数据复制多个副本到其他机器上,满足故障恢复和负载均衡。同时复制功能也是运行高可用的基础。

六,主从复制哨兵

  运行在redis的主从复制模式下,解      决主节点一旦发生故障不需要人工干      预的问题,redis的哨兵方案实现的高      可用对系统可用性非常由帮助。
  redis sentinel时一个分布式系统,为redis提供高可用功能,主要功能是1. 监控redis服务器节点看主从之间是否运行正常
  2.提醒运维运维人员发送故障通知
  3.自动故障迁移failover,当主服务    器故障时  哨兵会开始一次故障迁移操作,选择该主从中的一个从节点作为新主,并让其他的从服务器重新复制新主的数据。并且当客户端连接原先的主服务器时,集群也会像客户端返回新主的地址。架构图如下
redis_第1张图片
image.png

redis_第2张图片
image.png
哨兵安装配置命令
  哨兵是基于主从复制,所以需要先部署好主从复制
  手工操作步骤如下: 1.先配置和创    建好 1 台服务器的节点和哨兵 2.使用 rsync 传输到另外 2 台机器 3.修改另外两台机器的 IP 地址 建议使用     ansible 剧本批量部署

  配置主从关系
  db02 和 db03
  redis-server       /opt/redis_6379/conf/redis_6379.conf
  redis-cli slaveof 10.0.0.51 6379
  ps -ef|grep redis
   启动哨兵
  3 台都操作
  redis-sentinel       /opt/redis_26379/conf/redis_26379.conf
,手动恢复主库,既模拟故障恢复
  1.主发生故障后,,观察其他从库的日志变化,故障转移后哨兵配置文件的变化。
  2. 修好主库后开启主库,在从库中设置优先级为0:.查询命令:CONFIG GET slave-priority
  3.设置命令:CONFIG SET slave-priority 0
  4.再在主库中sentinel failover mymaster.重新设置自己为主
  5.改回原先设置的从优先级默认的值100,方便下次故障转移。

七,redis Cluster

redis cluster 时redis的分布式解决方案,在3.0版本正式推出
当遇到单机,内存,并发,流量等瓶颈时,可用采用cluster架构方案达到负载均衡目的。

官方的redis Cluster集群方案, 很好的解决了集群方面的问题
  分布式redis数据库时将整个数据库按照分区规则映射到多个节点,将数据集划分到多个节点上,
  每个节点负责整体数据的一个子集,采用的是hash分片规则。
redis_第3张图片
image.png

redis_第4张图片
image.png
集群规划目录规划
 redis 安装目录
  /opt/redis_{PORT}/{conf,logs,pid}
   redis 数据目录
 /data/redis_{PORT}/redis_{PORT}.rdb
   redis 运维脚本
  /root/scripts/redis_shell.sh
拓扑规划很重要,划清主从复制关系,同时考虑高可用
redis_第5张图片
image.png

你可能感兴趣的:(redis)