rdb

Redis Cluster

佐手、 提交于 2019-11-29 19:27:41
Redis Cluster 集群 redis集群有以下几种方式 普通一主多从 普通一主多从+哨兵 cluster分片模式 一主多从 搭建方式网上很多,就不多描述了。 这种集群方式,一般master用作写,slave用做读,用来做读写分离,slave的数据从master同步。 这种情况下,由于master只有一个,所有容灾性不新,如果master挂掉之后,slave不能自动升级成master对外提供服务。而且master还是否挂掉, 这个问题也不好得知。 这个时候我们可能就需要获取master的状态,并且在master挂掉的情况下能够自动将其中一个slave自动升级成master,继续对外提供服务,因此哨兵就来了。 一主多从+哨兵(Sentinel) 哨兵是在一主多从的基础上,增加对redis服务器的监控,并在down机时自动将其中一个slave升级成master,这也就是哨兵的作用。 哨兵本质上只是一个运行在特殊模式下的Redis服务器。哨兵的启动 redis-sentinel /path/sentinel.conf 或者 redis-server /path/sentinel.conf --sentinel 初始化服务器 使用sentinel专用代码 初始化sentinel状态 初始化sentinel状态的masters属性 创建连向主服务器的网络连接

面试专题(Mysql及Mongodb)

帅比萌擦擦* 提交于 2019-11-29 10:02:52
mysql面试题 1. 各个数据库存储引擎区别 mysql的存储引擎是针对表进行设置的,一个库的不同表可以设置不同的存储引擎,mysql默认支持多种存储引擎,以适用不同领域的数据库应用需要,主要的几个数据库引擎如下:  MyISAM存储引擎 5.5之前默认的存储引擎,不支持事务、不支持外键,表级锁,内存和硬盘空间占用率低,其优势是访问速度快,对事务完整性没有要求,以select、insert为主的应用基本上都可以使用这个引擎;  InnoDB存储引擎 5.5之后默认的存储引擎,提供了具有提交、回滚和奔溃恢复能力的事务安全,支持外键并提供了行级锁,其劣势在于写的处理效率相对较低,并且会占用更多的磁盘空间以保留数据和索引;  MEMORY存储引擎 使用存于内存中的内容来创建表,MEMORY类型的表数据存于内存访问非常的快,默认使用HASH索引,一旦数据库服务重启或关闭,表中的数据就会丢失;  MERGE存储引擎 MERGE存储引擎是一组MyISAM表组合,这些MyISAM表结构完全相同。MERGE表本身没有数据,对MERGE表的CRUD操作都是通过内部的MyISAM表进行的; 2. 提高sql 语句效率的技巧  大批量插入数据  大批量数据插入空表,可将表设置成为MyISAM,并通过disable keys将唯一索引关闭;  大批量数据插入非空Innodb表

Redis在Docker中的数据持久化

随声附和 提交于 2019-11-29 09:41:37
项目Github地址: github/booklet Redis 提供了两种不同的持久化方法来将数据存储到硬盘里面。一种方法叫快照(snapshotting,RDB),它可以将存在于某一时刻的所有数据都写入硬盘里面。 另一种方法叫只追加文件(append-only file,AOF),它会在执行写命令时,将被执行的写命令复制到硬盘里面。 这篇文章梳理了Redis两种持久化方法的知识点,并通过Docker + Docker-Compose进行环境的模拟,来进行数据的备份与恢复等操作。 至于测试数据,我通过一个python脚本批量录入三百万条key-value键值对(会消耗719.42M内存,来源于redis-cli info信息),没有python环境的同学,可以使用我在项目里准备的另一个shell脚本 python脚本代码: # -*- coding: UTF-8 -*- # file write.py # author liumapp # github https://github.com/liumapp # email liumapp.com@gmail.com # homepage http://www.liumapp.com # date 2019/9/9 # import redis r = redis.Redis(host="127.0.0.1", port=6379,

Redis持久化机制:RDB和AOF

耗尽温柔 提交于 2019-11-29 09:05:32
Redis数据持久化 Redis作为一个 内存 数据库,数据是以内存为载体存储的,那么一旦Redis服务器进程退出,服务器中的数据也会消失。为了解决这个问题,Redis提供了持久化机制,也就是把内存中的数据保存到磁盘当中,避免数据意外丢失 Redis提供了两种持久化方案: RDB持久化 和 AOF持久化 ,一个是快照的方式,一个是类似日志追加的方式 RDB快照持久化 RDB持久化是通过 快照 的方式,即在指定的时间间隔内将内存中的数据集快照写入磁盘。在创建快照之后,用户可以备份该快照,可以将快照复制到其他服务器以创建相同数据的服务器副本,或者在重启服务器后恢复数据。RDB是Redis默认的持久化方式 快照持久化 RDB持久化会生成RDB文件,该文件是一个 压缩 过的 二进制文件 ,可以通过该文件还原快照时的数据库状态,即生成该RDB文件时的服务器数据。RDB文件默认为当前工作目录下的 dump.rdb ,可以根据配置文件中的 dbfilename 和 dir 设置RDB的文件名和文件位置 # 设置 dump 的文件名 dbfilename dump.rdb # 工作目录 # 例如上面的 dbfilename 只指定了文件名, # 但是它会写入到这个目录下。这个配置项一定是个目录,而不能是文件名。 dir ./ 触发快照的时机 执行 save 和 bgsave 命令 配置文件设置

Redis事件和服务器

∥☆過路亽.° 提交于 2019-11-29 08:57:11
Redis事件和服务器 事件 Redis是个单线程的,但是速度非常快,其主要原因是因为它是基于事件的,是一个事件驱动程序,了解NIO的应该都知道这种方式。 Redis服务器需要处理两类事件。 文件事件(file event): Redis服务器通过套接字与客户端进行连接,而**文件事件就是服务器对套接字操作的抽象。**服务器与客户端的通信会产生相应的文件事件,而服务器通过监听并处理这些事件来完成一系列网络通信操作。 时间事件(file event): Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。 文件事件 Redis基于Reactor模式开发了自己的网络事件处理器,则个处理器被称为文件时间处理器(file event handler): 文件事件处理器采用I/O多路复用(multiplexing)程序来同时监听多个套接字,并根据套接字目前崭新的任务来为套接字关联不同的事件处理器。 当被监听的套接字准备好连接应答(accept),读取(read),写入(write),关闭(close)等操作时,与操作对应的文件事件就会产生,这是文件时就处理器就会调用套接字之前关联号的事件处理器来处理这些事件。 构成 文件时间处理器由四个部分组成,分别是套接字。I/O多路复用程序,文件事件分发器(dispatcher

Redis数据库结构和持久化

佐手、 提交于 2019-11-29 08:04:29
Redis数据库,持久化 数据库 Redis服务器将所有的数据库都保存在服务器状态redis.h/redisServer结构的db数组中,每个项目都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库。 struct redisServer { //... // 一个数组,保存这服务器中的所有数据库 redisDb *db; // 服务器数据库数量 int dbnum; // ... } 服务器初始化的时候,程序会根据服务器状态的dbnum属性来决定创建多少个数据库,这个属性值由redis.conf中配置项database选项决定,值默认是16。 切换数据库使用select +数据库号来切换,默认是0号数据库。例如:select 9。 在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这是个指向redisDb结构的指针。 typedef struct redisClient { // ... // 记录客户端当前正在使用的数据库 redisDb *db; // ... } redisClient; 键空间 Redis是一个key-value数据库服务器,而每个数据库都有redis.h/redisDb结构表示,其中dict字典(hash表)保存了数据库中所有的键值对,我们将这个字典成为 键空间(key space) 。

Redis持久化的原理及优化

99封情书 提交于 2019-11-29 07:25:17
更多内容,欢迎关注微信公众号:全菜工程师小辉~ Redis提供了将数据定期自动持久化至硬盘的能力,包括RDB和AOF两种方案,两种方案分别有其长处和短板,可以配合起来同时运行,确保数据的稳定性。 RDB 保存数据快照至一个RDB文件中,用于持久化。RDB操作和Mysql Dump相似。 执行方式 save。同步操作,会阻塞Redis。 bgsave。调用linux的fork(),然后使用新的线程执行复制。但是fork期间也会阻塞Redis,但是阻塞时间通常很短。 自动保存。Redis配置文件中设置了自动保存的触发机制,可以自定义修改,运行原理同bgsave。 save和bgsave的对比 注意: 如果机器上运行多个Redis,需要配置RDB文件名称,否则多个Redis的RDB文件会相互覆盖。 除了上述三种执行方式,以下情况也会生成RDB文件: 主从的全量复制时,主机会生成RDB文件。 Redis中的debug reload提供debug级别的重启,不清空内存的一种重启,这种方式也会触发RDB文件的生成。 执行shutdown时,会触发RDB文件的生成。 RDB的缺点 全量数据存储,耗时。 虽然fork()采用copy-on-write策略,但仍消耗内存 写RDB文件消耗大量IO性能。 AOF 采用AOF持久方式时,Redis会把每一个写请求都记录在一个日志文件里

mac系统安装redis

自古美人都是妖i 提交于 2019-11-29 07:11:12
1.下载 打开官网: https://redis.io/ Download---Stable---Download3.2.8,下载最新稳定版,这里是3.2.8 2.安装 下载完成后,打开命令行工具,执行解压命令 tar zxvf redis-3.2.8.tar.gz 将解压后文件夹放到/usr/local mv redis-3.2.8 /usr/local/ 切换到相应目录 cd /usr/local/redis-3.2.8/ 编译测试 sudo make test 编译安装 sudo make install 启动Redis redis-server 3.配置 在redis目录下建立bin,etc,db三个目录 sudo mkdir /usr/local/redis-3.2.8/bin sudo mkdir /usr/local/redis-3.2.8/etc sudo mkdir /usr/local/redis-3.2.8/db 把/usr/local/redis/src目录下的mkreleasehdr.sh,redis-benchmark, redis-check-rdb, redis-cli, redis-server拷贝到bin目录 cp /usr/local/redis-3.2.8/src/mkreleasehdr.sh . cp /usr/local/redis-3

金九银十面试前必须要知道的“21道Redis面试题”

こ雲淡風輕ζ 提交于 2019-11-29 05:03:09
1、使用redis有哪些好处? 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) 支持丰富数据类型,支持string,list,set,sorted set,hash 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 2、redis相比memcached有哪些优势? memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 redis的速度比memcached快很多 redis可以持久化其数据 3、redis常见性能问题和解决方案: Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内 尽量避免在压力很大的主库上增加从库 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3... 这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。 4、redis

面试前必须要知道的21道Redis面试题

大兔子大兔子 提交于 2019-11-29 04:04:50
1、使用redis有哪些好处? 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) 支持丰富数据类型,支持string,list,set,sorted set,hash 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 2、redis相比memcached有哪些优势? memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 redis的速度比memcached快很多 redis可以持久化其数据 3、redis常见性能问题和解决方案: Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内 尽量避免在压力很大的主库上增加从库 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3... 这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。 4、redis