百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

重中之重基础-Redis介绍(redis基础知识)

mhr18 2024-11-06 10:51 27 浏览 0 评论

Redis概述

Redis是Salvatore Sanfilippo在2009年为其初创公司LLOOGG开发的,目前仍是独立项目,但VMWare赞劣了项目(作者是其雇员)。它采用C语言实现,因此性能很好。采用BSD许可证,使用键值存储,和Amazon Dynamo,Cassandra,Riak,Voldemort,Memcache类似。支持丰富的数据类型,比如数组,链表,集合等,非常适合需要表达时间线的web服务,例如微博。

Redis支持的数据类型有:

1.字符串

2.链表

3.集合

4.有序集合

5.散列表

Redis的主从复制

Redis自带有主从复制的功能,只要设置配置文件redis.conf的slaveof选项即可,如下所示:



但我们可以使用keepalived+redis的方法实现高可用,如下所示:

  1. redis的配置
  2. 主机 端口 角色
  3. redis0 6379 master
  4. redis1 6379 slave
  5. keepalived的配置
  6. redis0和redis1使用一个虚拟ip

并使用如下脚本监控redis服务是否存活:

#!/bin/bash
/usr/local/bin/redis-cli -h 192.168.1.53 -p 6379 info > /dev/null
if [ $? -eq 0 ]; then
 echo "redis OK"
 exit 0
else
 echo "no redis service found!"
 /usr/local/bin/redis-server /path/to/redis.conf
 # try to start it again
 /usr/local/bin/redis-cli -h 192.168.11.53 -p 6380 info > /dev/null
 if [ $? -eq 0 ]; then
 exit 0
 else
 # restart failed
 killall keepalived
 echo "error"
 fi
fi

要实现redis的故障恢复,可以使用keepalived配置的notify_master, notify_backup这两个方法执行特有的脚本。实际上只要在slave(即redis1)上有2个脚本,第一个用于在redis1接管虚拟ip之后,执行slaveof no one把自己变成master。第二个是在redis1交出虚拟ip之后,在redis0执行slaveof no one确保redis0恢复为主的状态,并对redis1执行slaveof redis0 6379开始重新从master同步数据,如果自己已经是slave就没必要同步了。

redis1上keepalived的配置方法如下,redis0只要去掉notify_master, notify_backup两行即可。

! Configuration File for keepalived
global_defs {
router_id redis1
}
vrrp_script Monitor_Redis {
 script "/opt/redis_keepalive.sh"
 interval 10
 weight 2
}
vrrp_instance 360 {
 state BUCKUP #(主机为MASTER,备用机为BACKUP)
 interface eth0 #(HA监测网络接口)
 virtual_router_id 110 #(主、备机的virtual_router_id必须相同)
 mcast_src_ip 192.168.11.53 #(多播的源IP,设置为本机外网IP,与VIP同一网卡)此项可不设置
 priority 70 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
 advert_int 1 #(VRRP Multicast广播周期秒数)
 authentication {
 ......
}
 notify_master /opt/redis_2master.sh
 notify_backup /opt/redis_2backup.sh
 track_script {
 Monitor_Redis #(调用nginx进程检测脚本)
}
 virtual_ipaddress {
 192.168.11.4 #(VRRP HA虚拟地址)
 }
}

Redis的持久化

Redis的有以下2种的持久化机制:

1.快照(snapshot)

2.AOF(Append Only File)

Redis的快照功能配置如下:



Redis快照原理如下:

Redis借助了fork命令的copy on write机制。在生成快照时,将当前迚程fork出一个子进程,然后在子迚程中循环所有的数据,将数据写成为RDB文件。

Redis原来的RDB文件不会坏掉,因为其写操作是在一个新迚程中迚行的,当生成一个新的,RDB文件时,Redis生成的子迚程会先将数据写到一个临时文件中,然后通过原子性rename系统调用将临时文件重命名为RDB文件,这样在仸何时候出现故障,Redis的RDB文件都总是可用的。

同时,Redis的RDB文件也是Redis主从同步内部实现中的一环。

我们可以很明显的看到,RDB有它的不足,就是一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。在某些业务下,这是可以忍受的,我们也推荐这些业务使用RDB的方式进行持久化,因为开启RDB的代价并不高。

AOF的配置如下:



AOF优先于RDB(即快照),RDB性能优于AOF,因为里面没有重复。

AOF Rewrite:

重新生成一份AOF文件,新的AOF文件中一条记录的操作只会有一次,而不像一份老文件那样,可能记录了对同一个值的多次操作。其生成过程和RDB类似, 也是fork一个进程,直接遍历数据,写入新的AOF临时文件。在写入新文件的过程中,所有的写操作日志还是会写到原来老的 AOF文件中,同时还会记录在内存缓冲区中。当重完操作完成后,会将所有缓冲区中的日志一次性写入到临时文件中。然后调用原子性的rename命令用新的 AOF文件取代老的AOF文件。

谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!

相关推荐

如何检查 Linux 服务器是物理服务器还是虚拟服务器?

在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...

第四节 Windows 系统 Docker 安装全指南

一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...

C++ std:shared_ptr自定义allocator引入内存池

当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...

Activiti 8.0.0 发布,业务流程管理与工作流系统

Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...

MyBatis动态SQL的5种高级玩法,90%的人只用过3种

MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...

Springboot数据访问(整合Mybatis Plus)

Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...

盘点金州勇士在奥克兰13年的13大球星 满满的全是...

见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...

Mybatis入门看这一篇就够了(mybatis快速入门)

什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...

Springboot数据访问(整合druid数据源)

Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...

Linux 中的 &quot;/etc/profile.d&quot; 目录有什么作用 ?

什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...

企业数据库安全管理规范(企业数据库安全管理规范最新版)

1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...

Oracle 伪列!这些隐藏用法你都知道吗?

在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...

Oracle 高效处理数据的隐藏神器:临时表妙用

各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...

Oracle 数据库查询:多表查询(oracle多表关联查询)

一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...

一文掌握怎么利用Shell+Python实现多数据源的异地备份程序

简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...

取消回复欢迎 发表评论: