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,当主服务    器故障时  哨兵会开始一次故障迁移操作,选择该主从中的一个从节点作为新主,并让其他的从服务器重新复制新主的数据。并且当客户端连接原先的主服务器时,集群也会像客户端返回新主的地址。架构图如下
image.png

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分片规则。
image.png

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